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

4

我在使用Apache HttpClient发送HttpPost Header时遇到了问题。

我在发送名称值对等内容时没有问题,但每当我设置或添加一个POST Header时,请求发出后Header就会消失。

我尝试过使用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个回答

22

您的代码中至少有一个错误。请尝试使用以下代码:

httppost.setHeader("Authorization", "Bearer "+accessToken);

谢谢,但标题仍然被删除 :( - Solder Smoker
你说的“dropped”是什么意思?在服务器端看到一个没有头部的请求了吗? - jdb
是的,授权头部不存在。 - Solder Smoker
这是一个非常简单的请求,所以我不知道可能出了什么问题,我也让其他人看了一下,他们也不知道...不过还是谢谢。 - Solder Smoker
这一切都在 AsyncTask 中运行,如果有关系的话。我认为如果没有抛出 NetworkOnMainThread 异常,那么它就不重要,但我认为值得一提。 - Solder Smoker
你的服务器隐藏了那个特定的头信息。尝试使用其他方法,例如:httppost.setHeader("-Authorization", "Bearer "+accessToken); - jdb

2

尝试连接服务,该服务显示您的HTTP头信息并捕获(仅打印纯HTML)输出。至少,您将了解您的头信息是否真的在传输过程中丢失,或者可能出现其他问题。


我发送的头部在响应中没有显示出来,事实上从响应中看起来根本没有发送任何头部。 - Solder Smoker
看来这可能不是一个解决方案,但至少我们已经缩小了错误可能出现的范围。 - Audrius Meškauskas

1
您在回复中提到头部不在响应中,为了澄清一下,头部并不会出现在响应中,而是在请求发送时发送给服务器。网络跟踪或Fiddler会话可以显示请求和响应,这将确切地告诉您它们是否被丢弃。

0

我已经尝试过按照各种教程,例如这个:http://www.xyzws.com/Javafaq/how-to-use-httpurlconnection-post-data-to-web-server/139但是头部仍然没有出现。 - Solder Smoker

-1

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

httpClient.getCredentialsProvider().setCredentials(
  new AuthScope(hostname, port), 
  new UsernamePasswordCredentials(user, pass));

我的代码是OAuth令牌请求的一部分,所以恐怕这不会起作用... - Solder Smoker

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接