我无法让Apache HttpClient正确发送HttpPost标头。
我在发送名称值对等方面没有问题,但每当我设置或添加POST标头时,它都会在发出请求时消失。
我已尝试过setHeader和addHeader,以及同时尝试这两种方法。
这是我的代码:
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("https://posttestserver.com/post.php");
httppost.setHeader("Authorization: Bearer", accessToken);
httppost.addHeader("Authorization: Bearer", accessToken);
Log.d("DEBUG", "HEADERS: " + httppost.getFirstHeader("Authorization: Bearer"));
ResponseHandler<String> responseHandler = new BasicResponseHandler();
String responseBody = httpclient.execute(httppost, responseHandler);
Log.d("DEBUG", "RESPONSE: " + responseBody);
此外,执行请求之前的调试语句打印出正确的标题,因此我知道它正在添加,然后稍后删除。
非常感谢任何帮助!
编辑:如果重要的话,这都在AsyncTask中运行。我不认为这样做,因为除非抛出了NetworkOnMainThread异常,否则我认为值得一提。
答案 0 :(得分:20)
代码中至少有一个错误。试试这个:
httppost.setHeader("Authorization", "Bearer "+accessToken);
答案 1 :(得分:2)
尝试连接tells your HTTP headers并捕获(只打印纯HTML)输出的服务。至少你会知道你的标题是真的丢失了还是其他的东西。
答案 2 :(得分:1)
你说的标题不在你的一个回复的响应中,只是为了澄清,标题不会回到响应上,它们只是在请求时发送到服务器。网络跟踪或提琴手会话可以显示请求和响应,这应该为您提供关于它们是否被丢弃的明确答案。
答案 3 :(得分:0)
尝试使用java.net.URLConnection.addRequestProperty(String field, String newValue)
答案 4 :(得分:-1)
我个人更喜欢使用另一种方法来正确设置http授权:
httpClient.getCredentialsProvider().setCredentials(
new AuthScope(hostname, port),
new UsernamePasswordCredentials(user, pass));