【问题标题】:Python & cURL status 403, only Postman gets 200 (IP based)Python & cURL 状态 403,只有 Postman 获得 200(基于 IP)
【发布时间】:2021-05-25 21:55:11
【问题描述】:

我遇到了一个非常奇怪的问题,我整天都在苦苦挣扎: 我想使用 REST-api。该 API 只能在我登录 VPN 时访问,因为该 API 只能从一个特定 IP 调用。

使用 Postman,我可以完美地使用 api。如果一切正常,我会得到状态 200,如果我搞砸了身份验证,我会得到状态 401,如果我尝试在未登录 VPN 的情况下使用 API,我会得到状态 403。

然后我尝试使用 python 自动化 API 调用。我还尝试定义一个“用户代理”,但没有帮助。

import requests
url = ""# I removed the url for this example
token=""# I removed the token for this example
headers = \
{
    "accept": "application/json;odata.metadata=minimal;odata.streaming=true",
    "Authorization" : f"Bearer {token}"
}
response = requests.get(url, headers=headers)

现在真正令人困惑的事情开始了:假设我设法在 Python 实现中犯了一个错误,我尝试使用 curl 使用 API。 Swagger 文档甚至有一个 cURL 的复制粘贴示例。结果:错误 403,访问被禁止。这很奇怪。登录到 VPN 后,我至少应该得到 401 错误(就像我使用 Postman 的身份验证错误一样)。

然后我只是将 url 复制到浏览器(Edge 和 Chrome)中。正如预期和希望的那样:错误 401(因为我无法指定用于身份验证的标头)。然后出于绝望,我尝试使用 selenium 调用 API,但出现错误 403。

这对我来说毫无意义。 Postman 与 cURL 有什么不同?为什么使用浏览器调用 url 可以工作,但不能使用带有 selenium 的“虚拟化”浏览器? 我认为这一定是我这边的一些配置问题。不知何故,好像 cURL 和 Python 绕过了 VPN。我什至不知道这是否可能。有人可以帮帮我吗?

【问题讨论】:

  • 跟踪邮递员发送的邮件

标签: python rest curl python-requests


【解决方案1】:

非常感谢您提供有关跟踪消息的想法。原来邮递员以某种方式提供了一个代理。我不知道它从哪里获得代理信息,但提供完全相同的代理实际上是解决方案。

Postman 也可以将请求转换为 cURL 请求,但它不包含代理。

【讨论】:

    猜你喜欢
    • 2023-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-14
    • 2018-12-21
    相关资源
    最近更新 更多