添加多个自定义 http 请求标头之谜
Posted
技术标签:
【中文标题】添加多个自定义 http 请求标头之谜【英文标题】:Adding multiple custom http request headers mystery 【发布时间】:2012-03-14 23:44:46 【问题描述】: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");
虽然我不认为它是相关的,但我想透露我正在使用自签名证书来执行来自 android 的这些 http 调用,遵循这个 blog。期待我可怜的http灵魂的神圣启示......
【问题讨论】:
您如何知道实际发送的是什么?您是否使用 Fiddler 检查过数据流?它会通过一些配置代理 HTTPS。 我还在 WCF C# 中编写服务器端代码。所以我知道正在发送什么。使用 fiddler 添加了两个自定义标题。只有那些 android 客户端代码有问题。 @Win Myo Htet:您可以通过在客户端激活线路/上下文日志记录来查看发送的 HTTP 数据包访问线路。您将看到请求消息中是否包含所有请求标头。 【参考方案1】:这是侥幸。我再也无法重现它了。我一直在使用工作解决方案,并在不同的项目上工作了一段时间。在How to enable logging for apache commons HttpClient on Android 的帮助下,我回来查看oleg 建议的wire /context logging,我无法再重现该问题。伐木的力量已经把问题吓跑了。如果问题再次出现并且如果我找出原因会更新。
【讨论】:
以上是关于添加多个自定义 http 请求标头之谜的主要内容,如果未能解决你的问题,请参考以下文章
如何将自定义 HTTP 请求标头添加到 Thymeleaf 生成的表单或链接?