How can I set the “User-Agent” header of a UIWebView in Swift

不羁岁月 提交于 2020-01-09 12:51:12

问题


I am using Xcode 6 for an iOS App with Swift. I have got a simple ViewController with an embedded UIWebView. You can find the code below. Now I want to change the User-Agent HTTP header. I tried to use the setValue method of NSURLRequest but it didn't work (see uncommented line). Does anyone know how to do that?

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

回答1:


This will change the agent of any call made through the 'normal' stack.

Swift 2:

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

Swift 3:

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



回答2:


If you want to append to the existing user agent string (useful for helping dynamic webpages that adapt to the user agent), then you can use the following.

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



回答3:


To switch between fake user agent and original one, you can use my function:

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)


来源:https://stackoverflow.com/questions/26219997/how-can-i-set-the-user-agent-header-of-a-uiwebview-in-swift

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!