Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/43.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 如何获取UIWebView用户代理_Iphone_Ios4_Uiwebview_User Agent - Fatal编程技术网

Iphone 如何获取UIWebView用户代理

Iphone 如何获取UIWebView用户代理,iphone,ios4,uiwebview,user-agent,Iphone,Ios4,Uiwebview,User Agent,我在使用一台远程服务器时遇到问题。我的应用程序使用[NSData INITWITH CONTENTS OFURL:方法向服务器发出请求,作为响应,我获得了在UIWebView中打开的网站url 问题是,这些请求具有不同的用户代理,服务器无法正确地为我服务,因为它希望我使用相同的用户代理发送所有请求。我知道如何更改用户代理(例如),但我真正想要的是以某种方式获取UIWebView的用户代理,并将其设置为[NSData initWithContentsOfURL:]为了避免服务器端出现问题,我遇到了

我在使用一台远程服务器时遇到问题。我的应用程序使用
[NSData INITWITH CONTENTS OFURL:
方法向服务器发出请求,作为响应,我获得了在
UIWebView
中打开的网站url


问题是,这些请求具有不同的用户代理,服务器无法正确地为我服务,因为它希望我使用相同的用户代理发送所有请求。我知道如何更改用户代理(例如),但我真正想要的是以某种方式获取
UIWebView
的用户代理,并将其设置为[NSData initWithContentsOfURL:]为了避免服务器端出现问题,我遇到了类似的问题,需要使NSURLConnection发送的用户代理与UIWebView发送的用户代理匹配。我的解决方案是创建一个UIWebView,然后使用javascript拉出用户代理

UIWebView*webView=[[UIWebView alloc]initWithFrame:CGRectZero];
NSString*secretAgent=[webView stringByEvaluatingJavaScriptFromString:@“navigator.userAgent]”

正如@nate所提到的,您可以在webview中调用Javascript:

UIWebView* webView = [[UIWebView alloc] initWithFrame:CGRectZero];
NSString* secretAgent = [webView stringByEvaluatingJavaScriptFromString:@"navigator.userAgent"];
但是,调用新的Javascript有点老套,创建一个零大小的webView是毫无意义的,因为您已经有了一个正在处理的webView

或者,您可以在给定的
webView
上简单地使用本机方法:

NSString* ua = [webView.request valueForHTTPHeaderField:@"User-Agent"];
NSLog(@"User-Agent = %@", ua);

请注意,您必须在主线程上使用此代码-这是有道理的,因为它使用UIKit,但非常不方便。当我在设备上运行时,这似乎不起作用。在SimaTimeStudio中,JohnK的替代方法使用原生API,而不是注入JS来获得更好的可读性/语义。这两种方法都很不幸地要求已经处理的请求/响应,因此程序员在异步读取值时需要考虑这一点。
NSString* ua = [webView.request valueForHTTPHeaderField:@"User-Agent"];
NSLog(@"User-Agent = %@", ua);