我正在尝试为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字符串没有出现。
有关如何调试此建议的建议?
答案 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代理,以查看哪些标头值确实是出站和入站的。然后,您可以看到问题是否真的在您的代码中,或者服务器上的某些魔法丢弃了什么。
有一个免费试用版,安装后如果你记录任何流量,模拟器发送的将通过代理。很好。