【问题标题】:How to use different User-Agent in different iOS Webview request如何在不同的 iOS Webview 请求中使用不同的 User-Agent
【发布时间】:2016-10-13 04:29:59
【问题描述】:

我知道我可以使用以下代码来更改默认代理:

NSDictionary *dictionary = [NSDictionary dictionaryWithObjectsAndKeys:@"Your user agent", @"UserAgent", nil];
[[NSUserDefaults standardUserDefaults] registerDefaults:dictionary];

但我想为不同的请求请求不同的用户代理。示例:请求 'www.google.com',使用 agent='google Agent',请求 'www.github.com',使用 agent='github Agent'。

我尝试了以下方法在每个请求中设置“User_Agent”,但它似乎不起作用。

- (void)viewDidLoad {
    NSString *urlAddress = @"http://www.amazon.com";

    //Create a URL object.
    NSURL *url = [NSURL URLWithString:urlAddress];

    //URL Requst Object
    NSMutableURLRequest *requestObj = [NSMutableURLRequest requestWithURL:url];
    [requestObj setValue:@"Foobar/1.0" forHTTPHeaderField:@"User_Agent"];

    // But the value is not "Foobar/1.0"
    NSString* secretAgent = [webView stringByEvaluatingJavaScriptFromString:@"navigator.userAgent"]; 
    NSLog(@"agent - %@", secretAgent); 

    //Load the request in the UIWebView.
    [webView loadRequest:requestObj];
}

还有一个问题:

似乎对默认代理的更改仅在“AppDelegate”或“初始化”中起作用。我对吗?因为我尝试更改“viewDidLoad”但它似乎不起作用。

【问题讨论】:

    标签: ios objective-c webview user-agent


    【解决方案1】:
    • 我观察到,如果您在webView 中加载任何带有user-agent 集的url 给它。一段时间后,您加载 不同的 url不同的用户 代理,但使用相同分配的WebView instane。Web 视图将 加载新的 url 但不能设置新的user-agent。它只是设置了旧的 您在第一次加载之前设置的。
    • 在您启动 UIWebview 的新实例之前,您无法更改(或 我们可以说每个会话可以设置一次用户代理)。所以我得出user-agent只能设置一次。
    • 我为这个问题所做的是,当我想设置新的用户代理时,我分配了新的实例。

    【讨论】:

    • 您或许可以使用委托shouldStartLoadWithRequest 来手动请求每个页面。只需返回NO 并在更改标题后手动加载它。
    【解决方案2】:

    您无需使用 JavaScript 进行设置。

    您拼错了 User-Agent。使用取自here的最小代码

    NSString* userAgent = @"My Cool User Agent";
    NSURL* url = [NSURL URLWithString:@"http://whatsmyuseragent.com/"];
    NSMutableURLRequest* request = [[NSMutableURLRequest alloc] initWithURL:url];
    [request setValue:userAgent forHTTPHeaderField:@"User-Agent"];
    

    【讨论】:

    • 我用你的方法试试,好像User-Agent也改不了了。
    • 请求完成后,我使用NSLog(@"User Agent - %@", [self.protocolWebView stringByEvaluatingJavaScriptFromString:@"navigator.userAgent"]);查看webView,它也打印出默认代理
    猜你喜欢
    • 1970-01-01
    • 2021-06-25
    • 1970-01-01
    • 1970-01-01
    • 2016-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-29
    相关资源
    最近更新 更多