curl 请求正常,转换成python 请求就403

大佬们,有啥解决办法吗,curl可以重复请求

curl

curl --location --request GET 'https://www.demo.com/0737/' \
--header 'User-Agent: Apifox/1.0.0 (https://apifox.com)' \
--header 'Accept: */*' \
--header 'Host: www.demo.com' \
--header 'Connection: keep-alive'

python

import requests

url = "https://www.demo.com/0737/"

payload={}
headers = {
   'User-Agent': 'Apifox/1.0.0 (https://apifox.com)',
   'Accept': '*/*',
   'Host': 'www.demo.com',
   'Connection': 'keep-alive'
}

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

print(response.text)
4 Likes

你不发代码怎么回答你

1 Like

不发代码怎么帮你看。显然就是你python代码里有格式错误呗

是不是没写ua

跨域、cf 都有可能,前两天处理佬友分享的 api 就遇到这个问题了

1 Like

代码已补上了

代码补上了啦

考虑tls指纹等问题试试

1 Like

import requests

headers = {
‘User-Agent’: ‘Apifox/1.0.0 (https://apifox.com)’,
‘Accept’: ‘/’,
‘Host’: ‘www.demo.com’,
‘Connection’: ‘keep-alive’,
}

response = requests.get(‘https://www.demo.com/0737/’, headers=headers)

换成curl_cffi,指定个浏览器指纹试试看行不行

2 Likes

嗯。py的有报错吗?要不报错也发一下。我想得到的原因有:

  • curl默认是会跟着3开头的重定向的,py不会
  • 默认情况下py是会校验https证书的,curl不知道,可能不会吧
  • py用的http版本可能比较高,强制用http/1.1试试
  • 可能网站封锁了python的tls指纹,但没封curl(这是有可能的,举个例子:它cf里拦截了所有机器流量,但是开发/测试自己需要调试,所以给curl开了白名单)

哦是变成403不是访问不了啊,dbq刚刚没看到。那就可能是最后一种情况了。先把前面的排除一下吧

可能的原因太多了

感谢佬,换成curl_cffi,指定个浏览器指纹就可以

谢谢佬,可以了