【发布时间】: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