【问题标题】:Web request works in browser, but it gives 'HTTP 403' in JavaWeb 请求在浏览器中有效,但在 Java 中给出 HTTP 403
【发布时间】:2022-11-21 22:12:11
【问题描述】:

我正在运行一个 Java 程序来从 Stock API 下载数据。网址是

https://tvc4.investing.com/49137b20ec52f5d1133789e270e21db8/1668879605/56/56/23/history?symbol=18325&resolution=5&from=1668448858&to=1668880918

如果我从浏览器运行这个 URL,我会得到一个 JSON 作为响应。但是,如果我从 Java 程序运行它,我会得到 403 禁止。我在 Chrome 中查找了开发人员工具,并在 Java 程序中设置了所有 HTTP 请求标头。我添加了 User-Agent/Cookie 等。但是我仍然收到 Forbidden 403 错误。

以下是我设置的 HTTP 标头:

下面是我在我的 Java 程序中得到的堆栈跟踪。

java.io.IOException: Server returned HTTP response code: 403 for URL: https://tvc4.investing.com/49137b20ec52f5d1133789e270e21db8/1668879605/56/56/23/history?symbol=18325&resolution=5&from=1668448858&to=1668880918
    at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1997)
    at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1589)
    at java.base/java.net.URLConnection.getContent(URLConnection.java:753)
    at java.base/sun.net.www.protocol.https.HttpsURLConnectionImpl.getContent(HttpsURLConnectionImpl.java:404)
    at ai.jeet.test.DataDownload.main(DataDownload.java:36)

当我通过 Postman 运行这个 API 调用时,我得到了一个禁止的 403,但也得到了一个 HTML 响应,上面写着启用 Cookies 和 Javascript。

我不明白服务器如何区分 Web 请求调用。显然我做错了什么,但我不知道是什么:-(

【问题讨论】:

    标签: java http connection http-status-code-403


    【解决方案1】:

    服务器无法真正区分邮递员调用或浏览器调用。在这种情况下,应用程序似乎正在使用基于 cookie 的身份验证。 如果您在 Postman/Java 代码中正确配置了所有内容,它应该会返回没有 403 状态代码的信息。

    基于 Cookie 的身份验证:

    基于 Cookie 的身份验证通常在这 4 个步骤中工作 -

    1. 用户在登录表单中提供用户名和密码,然后 客户端/浏览器发送登录请求。

    2. 发出请求后,服务器通过查询数据库在后端验证用户。如果请求有效,则 将使用从中获取的用户信息创建会话 数据库并存储它们。对于每个会话,一个唯一的 ID 称为 会话 ID 已创建。默认情况下,会话 ID 为
      通过浏览器提供给客户端。

    3. 浏览器将在每个后续请求中提交此会话 ID。 4. 根据数据库验证会话 ID。基于 在这个会话 ID 上,服务器将识别会话 属于哪个客户端,然后授予请求访问权限。 一旦用户注销应用程序,会话就会在客户端和服务器端被销毁。

      可能是您缺少特定的 cookie。查看这篇关于在 postman 中正确设置 cookies 的文章。: https://www.toolsqa.com/postman/cookies-in-postman/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-25
      • 2016-07-11
      • 1970-01-01
      • 2020-07-31
      • 1970-01-01
      相关资源
      最近更新 更多