如何在Java Android中为客户端请求设置HttpPost标头

时间:2013-02-01 21:08:34

标签: java android oauth http-headers http-post

我无法让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异常,否则我认为值得一提。

5 个答案:

答案 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)

http://developer.android.com/reference/java/net/URLConnection.html#addRequestProperty%28java.lang.String,%20java.lang.String%29

答案 4 :(得分:-1)

我个人更喜欢使用另一种方法来正确设置http授权:

httpClient.getCredentialsProvider().setCredentials(
  new AuthScope(hostname, port), 
  new UsernamePasswordCredentials(user, pass));
相关问题