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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在Swift中设置UIWebView的“User-Agent”标头相关的知识,希望对你有一定的参考价值。

我正在使用Xcode 6作为带有Swift的ios应用程序。我有一个带有嵌入式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)
    }
}
答案

这将改变通过“普通”堆栈进行的任何调用的代理。

斯威夫特2:

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

斯威夫特3:

UserDefaults.standard.register(defaults: ["UserAgent": "custom value"])
另一答案

如果要附加到现有用户代理字符串(用于帮助适应用户代理的动态网页),则可以使用以下内容。

let userAgent = UIWebView().stringByEvaluatingjavascriptFromString("navigator.userAgent")! + " Custom-Agent"
NSUserDefaults.standardUserDefaults().registerDefaults(["UserAgent" : userAgent])
另一答案

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

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

以上是关于如何在Swift中设置UIWebView的“User-Agent”标头的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Swift 中设置导航栏的标题? [复制]

如何在 Swift 中设置单元测试?

如何在 Swift 3 中设置状态栏样式

如何在 Swift 中设置图像按钮

如何在圈子 Swift 5 中设置 UIImageView

如何在 Swift 中设置推送通知