如何解决Python脚本请求API返回403的问题?

API

https://libgen.li/json.php?object=e&doi=10.2117/psysoc.2017.68&fields=commentary

操作

  1. postman和浏览器访问状态码都是200
  2. 用postman将API转为 python requsts 代码,并保存到py文件中,执行py脚本,状态码返回403。转为CURL 也是类似现象
  3. 添加 refer / UA / postman的request header 参数,在py脚本中都返回403
  4. 放到浏览器中回车就可以拿到结果,隐私窗口同理
  5. 没有挂代理。切换手机热点(电信),提示连接失败

我的问题

  1. 如何让python脚本请求上述URL可以得到200的状态码,并可以返回结果
代码
import requests

url = "https://libgen.li/json.php?object=e&doi=10.2117/psysoc.2017.68&fields=commentary"

payload = {}
headers = {}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

正确结果示例

3 Likes


挂了代理?还是设置了什么东西?

1 Like

你是不是写成post请求了,代码也没贴

image

没有挂代理

奇怪,我开个手机热点试试

代码就是从postman中粘贴出来的,所以没有贴

换成手机热点就返回了这个信息
TimeoutError: [WinError 10060] 由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。

没代码怎么看问题。。

补上了(代码是从postman中复制出来的)

挂梯子了,不挂梯子的情况下Timeout了

我确认了一下,我用的wifi可以连接youtube,国内服务器处理上述请求就是timeout。

这种情况下,我是不是可以理解为我的 IP 被 "https://libgen.li 禁用"了?

我待会儿换个代理+手机热点试试

不是,你命令行代理要设置的,大多数代理工具应该都不会设置命令行代理的。

代理的问题。

  1. 国内网络访问就出现timeout。
  2. 公司网络不知道啥情况,就是无法返回403。
  3. 挂了个香港的代理,就正常了。

感谢各位大佬的分析,非常感谢。