web-dev-qa-db-ja.com

Swift=でUIWebViewの「User-Agent」ヘッダーを設定するにはどうすればよいですか

SwiftでiOSアプリにXcode 6を使用しています。 UIWebViewが埋め込まれたシンプルなViewControllerがあります。以下のコードを見つけることができます。ここで、User-Agent HTTPヘッダーを変更します。 setValueNSURLRequestメソッドを使用しようとしましたが、機能しませんでした(コメントなしの行を参照)。誰もそれを行う方法を知っていますか?

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)
    }
}
21
sebbo

これにより、「通常の」スタックを介して行われたコールのエージェントが変更されます。

スイフト2:

NSUserDefaults.standardUserDefaults().registerDefaults(["UserAgent": "Custom-Agent"])

スウィフト3:

UserDefaults.standard.register(defaults: ["UserAgent": "custom value"])
40
sebbo

既存のユーザーエージェント文字列に追加する場合(ユーザーエージェントに適応する動的なWebページを支援するのに役立ちます)、次を使用できます。

let userAgent = UIWebView().stringByEvaluatingJavaScriptFromString("navigator.userAgent")! + " Custom-Agent"
NSUserDefaults.standardUserDefaults().registerDefaults(["UserAgent" : userAgent])
29
PassKit

偽のユーザーエージェントと元のユーザーエージェントを切り替えるには、次の関数を使用できます。

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)
0
Bartosz Hernas