iPhone URL请求:向HTTP标头字段添加值

时间:2009-04-26 22:53:03

标签: iphone cocoa cocoa-touch

我正在尝试为URL请求的标头添加值。

这样的东西很好用:

[urlRequest addValue:@"gzip" forHTTPHeaderField:@"Accept-Encoding"];

但这甚至没有出现在标题中:

NSString *authString = [[NSString alloc] initWithString:
                          [defaults objectForKey:@"auth"]];
[urlRequest addValue:authString forHTTPHeaderField:@"iphoneID"];

我完全难过了。 auth字符串长约90个字符。这是一个问题吗?

编辑: 这是我正在尝试的代码:

NSString *authString = [[NSString alloc] initWithString:[defaults objectForKey:@"auth"]]; 
[urlRequest addValue:authString forHTTPHeaderField:@"iphoneid"]; 
[urlRequest addValue:@"gzip" forHTTPHeaderField:@"Accept-Encoding"]; 

我可以看到通过Wireshark发送的Accept-Encoding标头,但无法找到iphoneid。它只是一个80-90个字符的字符串。

另一个更新: 所以似乎问题不是字段“iphoneid”而是我试图传递给它的authString。我刚用@“something”创建的其他字符串工作正常,但是我从NSUserDefaults中提取的auth字符串没有出现。

有关如何调试此建议的建议?

3 个答案:

答案 0 :(得分:7)

真正的问题。

我从NSUserDefaults拉出的字符串已经有一行结尾了。设置为标题时,会追加另一个\r\n,这显然无效。因此,标头不会出现在任何传出的数据包中。

修复:

在设置为标题值之前,使用此选项剪掉字符。

[yourString stringByTrimmingCharactersInSet: [NSCharacterSet whitespaceAndNewlineCharacterSet]];

答案 1 :(得分:2)

测试清单:

  • 此时确认您确实拥有NSMutableURLRequest(而不是NSURLRequest)。特别是,由于“无法识别的选择器”,请检查日志中的异常。

  • 验证urlRequest不是nil。

  • 切换到setValue:forHTTPHeaderField:而不是addValue:forHTTPHeaderField:。

  • 将forHTTPHeaderField:值换成@“Accept-Encoding”以查看该字段是否存在问题

  • 为auth交换@“gzip”以查看值是否有问题。

答案 2 :(得分:1)

您需要Charles Web代理,以查看哪些标头值确实是出站和入站的。然后,您可以看到问题是否真的在您的代码中,或者服务器上的某些魔法丢弃了什么。

有一个免费试用版,安装后如果你记录任何流量,模拟器发送的将通过代理。很好。

http://www.charlesproxy.com/