ios 如何在 Swift 中设置 UIWebView 的“User-Agent”标头

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/26219997/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-31 03:02:24  来源:igfitidea点击:

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

iosswiftuiwebviewuser-agentnsurlrequest

提问by sebbo

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-AgentHTTP header. I tried to use the setValuemethod of NSURLRequestbut it didn't work (see uncommented line). Does anyone know how to do that?

我正在将 Xcode 6 用于带有 Swift 的 iOS 应用程序。我有一个带有嵌入式 UIWebView 的简单 ViewController。您可以在下面找到代码。现在我想更改User-AgentHTTP 标头。我尝试使用 的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)
    }
}

回答by sebbo

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

这将更改通过“正常”堆栈进行的任何调用的代理。

Swift 2:

斯威夫特 2:

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

Swift 3:

斯威夫特 3:

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

回答by PassKit

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

回答by Bartosz Hernas

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

要在假用户代理和原始用户代理之间切换,您可以使用我的功能:

Swift 4:

斯威夫特 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)