【问题标题】:HTTP Request header issue in AndroidAndroid中的HTTP请求标头问题
【发布时间】:2016-03-29 12:38:38
【问题描述】:

我正在尝试触发一个 API,我需要在其中添加两个标头,即令牌和设备 ID。下面是我添加标题的代码:

        DefaultHttpClient httpClient = new DefaultHttpClient();
        HttpPost httpPost = new HttpPost(nameValuePairs[0].get(0).getValue().toString());
        nameValuePairs[0].remove(0);

        ResponseHandler<String> res = new BasicResponseHandler();

        // set header

        httpPost.setHeader("Content-Type", "application/x-www-form-urlencoded");
        httpPost.setHeader("deviceid", "358978060711939");
        httpPost.setHeader("token", "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJHVUlEIjoiYjdlNjZiOWQtMjBjNy00MGI2LTliMzgtOTc3OGQ2OWIwM2E1IiwiRU5USVRZIjoiRUFCTSIsIlVOSVQiOiJVQk0yIiwiUk9MRU5BTUUiOiJTRUxGIiwiSUQiOiIwMDAyMzciLCJBTFRJRCI6IjMzMyIsIlVTRVJfTkFNRSI6IkFuaWwiLCJMT0dJTl9HVUlEX0tFWSI6ImU2NWM2YWEzLTZlNDItNDUyYS1hOGEwLWRlYzRhMGRiNTIxNyIsImlhdCI6MTQ1OTI0ODkyM30.m742d9xd6XlBBjZ3_ODWuoCEdWvSkhPAuNrDee1vi74");

        httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs[0]));
        response = httpClient.execute(httpPost, res);

作为响应,我得到:org.apache.http.client.HttpResponseException: Not Found

当我用任何字母数字值替换令牌时,我会收到带有错误消息的响应。但是当我传递上面提到的实际令牌值时,我遇到了异常。即使我也尝试使用 addHeader 函数,但也遇到了同样的问题。我无法理解如何解决此错误。

【问题讨论】:

  • 就此咨询您的网络服务开发人员
  • 在咨询之前,我想确保我的代码正确与否。错误不应该在我的最后。
  • 在设备 ID 或令牌无效的情况下似乎找不到
  • 尝试用wireshark调试它。在那里您可以看到您发送的整个 http 消息。如果您发送的标头正确,请尝试联系 Web 服务开发人员。

标签: android rest http-headers


【解决方案1】:

这是导致错误的处理程序。不要使用。 您应该编写自己的处理程序或在没有处理程序的情况下调用 execute。

 httpClient.execute(httpPost);//remove the handler

我希望这会有所帮助。谢谢你

【讨论】:

  • 谢谢...它有效 我能解释一下为什么删除处理程序有效吗?
  • 当然!在此之前我可以知道你从服务器得到什么响应
  • org.apache.http.client.HttpResponseException: Not Found at org.apache.http.impl.client.BasicResponseHandler.handleResponse(BasicResponseHandler.java:76) 这是我从服务器得到的错误在尝试你的逻辑之前。之后我得到了 JSON 格式的正确响应
  • BasicResponseHandler 只用于StringResponse,它是这样完成的 HttpResponse response = httpClient.execute(httpGet);字符串 responseBody = responsehandler.handleResponse(response);而且还说不实时使用BasicResponseHandler。如果你问我你应该停止使用 apache httpclient。它的描述。请使用截击。它比所有更好更快。谢谢你
【解决方案2】:

您的令牌似乎不正确。 HTTP 协议中的标头集有其自身的限制。要检查它,只需尝试发送您的修剪令牌(例如 30 个字符)。

如果它没有帮助,你有不正确的另一个参数。无论如何,我会给你建议,使用Retrofit

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-28
    • 2017-10-07
    • 2015-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-08
    相关资源
    最近更新 更多