SwiftでiOSアプリにXcode 6を使用しています。 UIWebViewが埋め込まれたシンプルなViewControllerがあります。以下のコードを見つけることができます。ここで、User-Agent
HTTPヘッダーを変更します。 setValue
のNSURLRequest
メソッドを使用しようとしましたが、機能しませんでした(コメントなしの行を参照)。誰もそれを行う方法を知っていますか?
import UIKit
class WebViewController: UIViewController {
@IBOutlet weak var webView: UIWebView!
override func viewDidAppear(animated: Bool) {
var url = NSURL(string: "https://www.samplepage.com")
var request = NSMutableURLRequest(URL: url)
// request.setValue("Custom-Agent", forHTTPHeaderField: "User-Agent")
webView.loadRequest(request)
}
}
これにより、「通常の」スタックを介して行われたコールのエージェントが変更されます。
スイフト2:
NSUserDefaults.standardUserDefaults().registerDefaults(["UserAgent": "Custom-Agent"])
スウィフト3:
UserDefaults.standard.register(defaults: ["UserAgent": "custom value"])
既存のユーザーエージェント文字列に追加する場合(ユーザーエージェントに適応する動的なWebページを支援するのに役立ちます)、次を使用できます。
let userAgent = UIWebView().stringByEvaluatingJavaScriptFromString("navigator.userAgent")! + " Custom-Agent"
NSUserDefaults.standardUserDefaults().registerDefaults(["UserAgent" : userAgent])
偽のユーザーエージェントと元のユーザーエージェントを切り替えるには、次の関数を使用できます。
Swift 4:
var originalUserAgent:String? = nil
let fakeUserAgent = "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36"
func setUserAgent(fake: Bool) {
if originalUserAgent == nil {
originalUserAgent = UIWebView().stringByEvaluatingJavaScript(from: "navigator.userAgent")
}
guard let originalUserAgent = originalUserAgent else {
return
}
if (fake) {
UserDefaults.standard.register(defaults: ["UserAgent": fakeUserAgent])
} else {
UserDefaults.standard.register(defaults: ["UserAgent": originalUserAgent])
}
}
// then use
setUserAgent(fake: false)