gpt4 book ai didi

java - HttpUrlConnection 不工作并显示 GET 和 POST 调用的不同状态代码

转载 作者:搜寻专家 更新时间:2023-11-01 08:58:27 26 4
gpt4 key购买 nike

我在对 REST API 进行 GET 调用时收到 FileNotFoundException。我得到的 HTTP 状态代码是 403
对于 POST 调用,我得到 IOException : No authentication challenges found,而我传递了 Authorization header 。在这里,我得到 HTTP 状态代码 401

看看我的already asked question查看 POST 调用的代码和 logcat 屏幕截图。

下面我附上了 GET 调用的 logcat 屏幕截图:

enter image description here

注意:
1) 我试过使用 Authenticator
2) 尝试了不同的 base64 标志,例如 NO_WRAP、URL_SAFE、DEFAULT。
3) 我对 www.google.com 的简单调用有效。
4) 当我记录 urlConnection.getErrorStream() 时,图像中的最后一行被打印出来。我不明白那是什么,它是什么意思。我已经在 header 中为 application/json 指定了 Content-type

更新:我尝试使用 Burp 并发现 header “Accept”、“Content-type”不同。我使用与 iOS 应用程序相同的方法。但它仍然不起作用。

注意事项:
1) 它总是在 in = urlConnection.getInputStream(); 行抛出异常。
2) 我记录了一些东西,根据它,内容长度为 114,不为空。内容类型是 application/json;字符=utf-8

最佳答案

iOS 和 Android 的 HTTP 流量有所不同。这是有保证的,否则您会从服务器获得相同的行为。不同之处可能在于 HTTP header 和/或参数。

这很难通过 SO Q&A 进行远程调试 - 例如我们不知道您的 iOS 客户端成功使用了哪些 header 和参数,也不知道您的服务器是如何配置和编程的。

如何诊断问题并 self 纠正:

  1. 跟踪您的工作 HTTP 流量:iOS 客户端 <-> 服务器
  2. 跟踪您的非工作 HTTP 流量:Android 客户端 <-> 服务器
  3. 比较 (2) 和 (3)。为了进行最彻底的比较,将每个 HTTP 请求和响应消息保存为 (2) 和 (3) 的单独文件,然后diff 相应的文件。

推荐的 HTTP 跟踪工具:

更新

对于 GET 和 POST,您似乎遇到了同样的问题:服务器配置为 BASIC 身份验证,但客户端没有正确遵循身份验证协议(protocol)。我认为它只是在这两种情况下显示为略有不同的症状:对于 GET,它显示“未找到资源”(因为您未通过身份验证),而对于 POST,资源是由您提供,但是服务器说您无权更改服务器上的资源。我建议您已经对请求内容进行了足够(很好!)的调试,现在您应该停下来,专注于让身份验证正常工作。

  1. 向服务器发送 GET/POST 请求,没有 Authorization header
  2. 允许服务器使用包含质询字符串的 WWW-Authenticate header 提示您进行身份验证(例如 WWW-Authenticate: Basic realm="Protected" 参见 RFC 2617 HTTP Basic Authentication and Digest Authentication )
  3. 现在向服务器发送一个额外的 GET 请求(没有/有原始请求内容),但包括身份验证 header ,使用 Base 64 编码的用户名:密码(授权:Basic ZnJhbms6ZmllZGxlcg== )

关于java - HttpUrlConnection 不工作并显示 GET 和 POST 调用的不同状态代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17141745/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com