2013-12-16 31 views
3

我知道可能存在一些与此相关的问题,但是当我尝试为我的UIWebView设置新的“用户代理”时,我遇到问题。这里就是我现在在做什么:NSMutableURLRequest中的用户代理未更改

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中显示的网页中显示的用户代理的屏幕截图: ScreenShot

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

谢谢。

+2

如果您尝试使用“@”User-Agent“'而不是'@”User_Agent“'会发生什么? –

+0

正是你刚才提到它改变它... –

+0

什么都没有发生......我在这个问题之前都试过了,而且我还是错了......对不起。问题已经编辑!除此之外...它似乎像UIWebView以某种方式覆盖用户代理,因为如果我发送任何其他头参数一切似乎工作正常。 – VaroX

回答

6

我通过把在didFinishLaunchingWithOptionsAppDelegate.m下面的代码“解决”我的问题:

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

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

谢谢大家的帮助。

+0

酷!这似乎工作,但没有记录在任何地方,所以在生产代码中使用可能有点危险...... –

+0

我知道!但我一直在阅读,似乎只要你不在NSMutableURLRequest类中使用混合方法,一切都应该超过罚款......我想我们会看到会发生什么! :)。 如果这种方法出现问题,我会让你知道。谢谢伊万。 – VaroX

+0

@VaroX已经让你的应用程序进入商店了吗?我和你的情况一样,需要决定是否使用你的解决方法。所以我想知道这是否会通过审查:)非常感谢! – Toastor

2

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

如果您尝试登录的User-AgentwebView:shouldStartLoadWithRequest:navigationType:方法,你会发现它已经覆盖,但是你可以使用NSURLConnection用自定义User-Agent加载您的请求,然后使用loadHTMLString:baseURL:方法或loadData:MIMEType:textEncodingName:baseURL:方法从UIWebView到显示从NSURLConnection下载的数据。

+0

嗨伊万,首先,谢谢你的回答...但是,**我不会失去使用这种方法的导航历史?? **如果是这样,这'不是我的问题的解决方案,因为有时我需要回到加载到UIWebView中的前一个网页。 – VaroX

+0

嗨,你也需要自己管理它,但它会非常简单。只需在控制器中创建一个属性('NSArray'或'NSMutableArray')并在其中保存'NSURLRequest's。之后,您需要做的就是取消'webView:shouldStartLoadWithRequest:navigationType:'中的请求,并使用'NSURLConnection'加载您的'NSURLRequest'。 –