3

我无法让 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 异常,但我认为它可能值得一提。

4

5 回答 5

20

您的代码中至少有一个错误。试试这个:

httppost.setHeader("Authorization", "Bearer "+accessToken);
于 2013-02-01T21:16:26.190 回答
2

尝试连接告诉您的 HTTP 标头并捕获(仅打印纯 HTML)输出的服务。至少您会知道您的标题是否真的在途中丢失了,或者可能是其他什么东西。

于 2013-02-01T21:32:32.430 回答
1

您说标题不在您的一个答复中的响应中,只是为了澄清,标题不会返回响应,它们只是在请求中发送到服务器。网络跟踪或提琴手会话可以显示请求和响应,这应该可以为您提供有关它们是否被丢弃的明确答案。

于 2016-12-08T18:32:40.027 回答
0

尝试使用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

于 2013-02-01T21:41:47.860 回答
-1

我个人更喜欢使用其他方法来正确设置 http 授权:

httpClient.getCredentialsProvider().setCredentials(
  new AuthScope(hostname, port), 
  new UsernamePasswordCredentials(user, pass));
于 2013-02-01T21:17:14.177 回答