添加多个自定义http请求标头之谜

时间:2012-03-14 23:44:47

标签: java https http-headers httpclient

HttpGet request = new HttpGet("https://192.168.1.140:8732/...);

我想知道为什么我只能成功发送自定义标头:UserName和AuthToken如果我执行以下操作:

    request.setHeader("User-Agent", "android_client");
    request.setHeader("Host", "192.168.1.140:8732");
    request.addHeader("UserName", mUserName);
    request.addHeader("AuthToken", mAuthorizationToken);

为什么这段代码不仅仅发送UserName而只发送AuthToken?当两条底线相反时。

    request.setHeader("User-Agent", "android_client");
    request.setHeader("Host", "192.168.1.140:8732");
    request.addHeader("AuthToken", mAuthorizationToken);
    request.addHeader("UserName", mUserName);

为什么此代码失败时出现400错误代码,当我没有指定主机

时,主机名无效
//  request.setHeader("User-Agent", "android_client");
//  request.setHeader("Host", "192.168.1.140:8732");
    request.addHeader("UserName", mUserName);
    request.addHeader("AuthToken", mAuthorizationToken);

如果我不需要发送UserName和AuthToken,我真的不需要设置主机,它可以正常工作,代码如下所示:

//  request.setHeader("User-Agent", "android_client");
//  request.setHeader("Host", "192.168.1.140:8732");

虽然我不认为它是相关的,但我想透露我在这个blog之后使用来自android的这些http调用的自签名证书。期待我可怜的http灵魂的神圣启示...

1 个答案:

答案 0 :(得分:0)

这是一个侥幸。我再也无法重现它了。我一直在使用工作解决方案,并在一段时间内处理不同的项目。在oleg的帮助下,我回来看看有线/上下文记录的How to enable logging for apache commons HttpClient on Android建议我无法重现问题。伐木的力量吓跑了这个问题。如果问题再次发生并且如果我找出原因,将更新。