代码之家  ›  专栏  ›  技术社区  ›  Michael Grinich

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

  •  6
  • Michael Grinich  · 技术社区  · 17 年前

    我正在尝试为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发送的,但是iphoneid却找不到。它只是一个字符串,80-90个字符长。

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

    关于如何调试它的建议?

    3 回复  |  直到 15 年前
        1
  •  7
  •   Michael Grinich    17 年前

    真正的问题。

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

    修复:

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

    [yourString stringByTrimmingCharactersInSet: [NSCharacterSet whitespaceAndNewlineCharacterSet]];

        2
  •  2
  •   Rob Napier    17 年前

    测试检查表:

    • 验证此时您是否实际拥有NSmutableURLRequest(而不是NSurlRequest)。尤其是,检查日志中是否存在由于“无法识别的选择器”而导致的异常。

    • 确认URLRequest不是零。

    • 切换到setvalue:forhttpheaderfield:而不是addvalue:forhttpheaderfield:。

    • 将forhttpheaderfield:value转换为@“accept encoding”以查看字段是否有问题。

    • 将@“gzip”替换为auth,查看值是否有问题。

        3
  •  1
  •   Kendall Helmstetter Gelner    17 年前

    您需要使用CharlesWebProxy来查看哪些头值是真正的出站和入站。然后,您可以看到问题是否真的出现在您的代码中,或者服务器上是否存在丢弃东西的魔力。

    这里有一个免费的试用版,安装之后,如果您点击记录,模拟器发送的任何流量都将通过代理服务器。很不错的。

    http://www.charlesproxy.com/