我在让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 异常以其他方式抛出,但我认为这可能值得一提。
代码中至少有一个错误。试试这个:
httppost.setHeader("Authorization", "Bearer "+accessToken);
尝试连接告诉您的HTTP标头的服务并捕获(只需打印纯HTML)输出。至少你会知道你的标题是否真的在途中丢失了,或者可能是其他东西。
您说标头不在其中一个回复中的响应中,只是为了澄清,标头不会返回响应,它们只是在请求中发送到服务器。网络跟踪或提琴器会话可以显示请求和响应,这应该为您提供有关它们是否被丢弃的明确答案。
尝试使用java.net.URLConnection.addRequestProperty(String field, String newValue)
http://developer.android.com/reference/java/net/URLConnection.html#addRequestProperty%28java.lang.String,%20java.lang.String%29
就个人而言,我更喜欢使用其他方法来正确设置http授权:
httpClient.getCredentialsProvider().setCredentials(
new AuthScope(hostname, port),
new UsernamePasswordCredentials(user, pass));