【问题标题】:User-Agent not changing in NSMutableURLRequest用户代理在 NSMutableURLRequest 中没有改变
【发布时间】:2013-12-16 18:19:31
【问题描述】:

我知道这可能有几个问题,但是当我尝试为我的 UIWebView 设置一个新的“用户代理”时,我遇到了一个问题。这是我现在正在做的事情:

NSURL *myUrl = [NSURL URLWithString:auxUrl];
    NSMutableURLRequest *myRequest = [NSMutableURLRequest requestWithURL:myUrl];

    NSMutableString *auxUserAgent = [[NSMutableString alloc] initWithString:[myRequest valueForHTTPHeaderField: @"User-Agent"]];
    [auxUserAgent appendString:@"(iOS)"];

    [myRequest setValue:auxUserAgent forHTTPHeaderField:@"User-Agent"];

    NSLog(@"UA : %@",[myRequest valueForHTTPHeaderField: @"User-Agent"]);

我正在尝试将一些文本附加到实际的用户代理中,并且在 XCode 控制台中它确实显示了新的用户代理值。

2013-12-16 19:03:42.200 应用程序[736:60b] UA:Mozilla/5.0(iPhone;CPU iPhone OS 7_0_4,如 Mac OS X)AppleWebKit/537.51.1(KHTML,如 Gecko)Mobile/11B554a (iOS)

但是当我运行我的应用程序时,它会显示旧的。这是我在 UIWebView 中显示的网页中显示的用户代理的屏幕截图:

所以.. 我的问题是:我错过了什么?系统中是否存在不允许开发人员更改此数据的内容?

谢谢。

【问题讨论】:

  • 如果您尝试使用@"User-Agent" 而不是@"User_Agent",会发生什么?
  • 正是你上面提到的改变它......
  • 什么都没有发生......我在这个问题之前都试过了,但我留下了错误的......对此感到抱歉。问题已经编辑!除此之外......似乎 UIWebView 正在以某种方式覆盖 User-Agent,因为如果我发送任何其他标头参数,一切似乎都可以正常工作。

标签: ios objective-c uiwebview user-agent nsmutableurlrequest


【解决方案1】:

我通过在 AppDelegate.mdidFinishLaunchingWithOptions 中添加以下代码“解决了”我的问题:

 NSDictionary *dictionnary = [[NSDictionary alloc] initWithObjectsAndKeys:@"YOUR CUSTOM USER-AGENT", @"UserAgent", nil];
[[NSUserDefaults standardUserDefaults] registerDefaults:dictionnary];

问题是我不能将文本附加到用户代理本身,但我可以编写我需要的数据来区分来自不同应用程序或 Web 浏览器对网页的访问。

感谢大家的帮助。

【讨论】:

  • 酷!这似乎可行,但它没有在任何地方记录,因此在生产代码中使用可能有点危险......
  • 我知道!但我一直在阅读,似乎只要您不使用 NSMutableURLRequest 类中的 swizzling 方法,一切都应该很好......我想我们会看到会发生什么! :)。如果这种方法出现问题,我会通知您。谢谢伊万。
  • @VaroX 你的应用已经上架了吗?我和你的情况一样,需要决定是否使用你的解决方法。所以我想知道这是否会通过审核:) 非常感谢!
  • 嗨@Toastor,不...我还没有发送应用程序进行审查,但我很快就会!我会让你知道它会发生什么:)
  • 你好@Toastor,我已经发送应用程序进行审查,这个解决方法没有任何问题!所以...随意使用它!
【解决方案2】:

它不会那样工作。 UIWebView 覆盖 User-Agent 字段。

如果您尝试在webView:shouldStartLoadWithRequest:navigationType: 方法中记录User-Agent,您会看到它已经被覆盖,但是您可以使用NSURLConnection 使用自定义User-Agent 加载您的请求,然后使用@ 987654326@方法或loadData:MIMEType:textEncodingName:baseURL:方法从UIWebView显示从NSURLConnection下载的数据。

【讨论】:

  • 嗨,Ivan,首先,感谢您的回答...但是,我不会使用这种方法丢失导航历史记录吗?? 如果是这样,这个' 不是我的问题的解决方案,因为有时我需要返回加载到 UIWebView 中的上一个网页。
  • 嗨,您也需要自己管理,但这很简单。只需在您的控制器中创建一个属性(NSArrayNSMutableArray)并将NSURLRequests 放在那里。之后,您需要做的就是取消webView:shouldStartLoadWithRequest:navigationType: 中的请求并使用NSURLConnection 加载您的NSURLRequest
猜你喜欢
  • 2012-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多