wake-up-neo.net

Wie kann ich den Header "User-Agent" eines UIWebView in Swift setzen?

Ich verwende Xcode 6 für eine iOS-App mit Swift. Ich habe einen einfachen ViewController mit einem eingebetteten UIWebView. Den Code finden Sie unten. Jetzt möchte ich den User-Agent-HTTP-Header ändern. Ich habe versucht, die setValue-Methode von NSURLRequest zu verwenden, aber es hat nicht funktioniert (siehe unkommentierte Zeile). Weiß jemand, wie das geht?

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

Dies ändert den Agenten jedes Anrufs, der über den "normalen" Stack erfolgt.

Swift 2:

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

Swift 3:

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

Wenn Sie an die vorhandene Benutzeragentenzeichenfolge anhängen möchten (hilfreich für dynamische Webseiten, die sich an den Benutzeragenten anpassen), können Sie Folgendes verwenden.

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

Um zwischen gefälschten Benutzeragenten und Originalagenturen zu wechseln, können Sie meine Funktion verwenden:

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