You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

代码请求目标URL返回403错误,浏览器可正常访问的排查求助

403权限错误排查:Python请求Investing.com JSON接口失败

直接在Edge或Chrome浏览器访问https://sbcharts.investing.com/events_charts/us/38.json可以正常获取JSON数据,但用以下Python代码请求时返回403 Forbidden,响应内容为不可读的二进制乱码:

from urllib import request

url='https://sbcharts.investing.com/events_charts/us/38.json'

headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36 Edg/114.0.1823.51',
    'Access-Control-Allow-Origin':'*',
    'Access-Control-Allow-Methods':'*',
    'Access-Control-Allow-Headers':'*',
    'Cross-Origin-Opener-Policy':'cross-origin',
    'Accept-Encoding': 'gzip, deflate, br',
    'Content-Security-Policy':'upgrade-insecure-requests',
    'Content-Security-Policy':"default-src https: data: wss: 'unsafe-inline' 'unsafe-eval'; form-action https:; report-uri",
    'Content-Type':'application/json',
    'Accept':'application/json,text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
    'Accept-Language':'en-US,en;q=0.9',
    'Referrer-Policy':'strict-origin-when-cross-origin',
    'Referrer':'http://localhost:5000/'
    }
            
data = requests.get(url, headers=headers)

返回的响应信息:

raw:
<urllib3.response.HTTPResponse object at 0x7fd97814c7f0>
reason: 'Forbidden'
request: <PreparedRequest [GET]>
status_code: 403
text:
'\x13�\x11\x00�>��ݹ�z�U\x0eU��$l�!\x06��\x1e�o!���\x0c\x13�{\x13�5�N����)\'��\x12��d۷I�))��\x034�!w\n��S�^cB{|\x1aKD���T:\x01Z���?�o[�1��\x14��\x1686ܺ����A�K�t�����x\x00y��Ϣ�P�\x18p�e\x06�m4�G�!�\x1e��_�=�Hɩ\rQ���R�+G�����<���\x13���H�\x06��\u0605�TNE��&G�\x1c�\x1b\x15\x13�Iԟ�d%�RN\r\r��\x00J����������>55Qpa�Z:\t͘���\x07(_��ZC�\x06&;\x02�\n��w�\x14N[�ݿ�LZ9:m�\x1f���@g[[s\x12�:ovȕC|��T��J\x1b/umW�O�t��\x18CLˌS�\n=^��\x05�P��$uJ�׀�WB�XfϢ\x0cf|Y}\x7fA�>4\x1a1&7#�\x14�ö́/?�f����1Ň���\x00[avS�\x7f�\x0e�b�S�JGf��\x0c\x00\x16�OV������\x1e�o�2d�\x0c\x050��\x06��\x08�#p���G�f6%��T�"O�;؛�7���i邾L�\x1ex�g�u\x18\x10��5�%3�n�h%�\x0316<�@�REEM�\x15Y\x06�� U�\x0c��T3�\x10ڄ��\x01sx\t�\x17r��$�˒x��L\x12�\x0f�T"$\x05ñ\\�%�EP�\x14А�\x1e\'&A��H1C?\x0b^\x0b��h�&�\x0c\x08W�WK��G\x03�f�\x08\x13�/:7����D�s�q\\`\x0c=�j�ч�q�l �[�\x17��\x04�f�K�,�/�p�o�(�\x0c=T$���\x03`\x10�� �����:��-��\x04\x0b�J�Ւ{�\x1a�[�СsP�+نI���+�d\x03�>\x1d�|j\x02G�tA��w\x0e�d`�\x0b�\t\x07u%}�J��X���\x12,�`�&YN�Zu�\x1bE��Ef#\x0f*?�t��\t<\x04���R2Y��٪�\'��Ќ���{3�9�...
url: 'https://sbcharts.investing.com/events_charts/us/38.json'
_content:
b'\x13\xa4\x11\x00\xc4>\x9b\xf6\xdd\xb9\x9cz\xb4U\x0eU\x96\xf3$l\xb3!\x06\x97\x90\x1e\xa0o!\xb1\xd2\xc3\x0c\x13\xee\x9b{\x13\xa65\xaeN\x94\xad\xd9\xdd)\'\xa5\xfc\x12\xd0\xec\xdb\xb7I\x81))\xa0\x84\x034\xe2\x94!w\n\xd4\xc9S\xf2^cB{|\x1aKD\xe9\xde\xd0T:\x01Z\xb1\xe6\xfa?\xe1o[\xc11\xbe\xfc\x14\xf7\xff\x1686\xdc\xba\xb0\x86\x9f\xf2A\xbeK\xb0t\x87\xe0\x8c\xa5\xf2x\x00y\xf9\xeb\xcf\xa2\xc0P\xb3\x18p\xe2e\x06\xc0m4\xdeG\xf6!\xba\x1e\xac\x9a_\xb7=\xdeH\xc9\xa9\rQ\x84\x8c\xa1R\xfe+G\xb6\xec\xa8\xf8\x90\x99<\xdb\xe0\xf1\x13\xfd\xdf\xdbH\xe6\x06\xaf\xf8\xd8\x85\xdeTNE\x8a\xb7&G\xb7\x1c\xa8\x1b\x15\x13\xf1I\xd4\x9f\x91d%\xa2RN\r\r\xb7\xee\x00J\xf9\xc1\xb6\xf4\xf9\xab\xf7\x97\x9f\x9e>55Qpa\xafZ:\t\xcd\x98\xe0\xc3\xe5\x07(_\xc0\x87ZC\xed\x06&;\x02\x93\n\xe7\cew\x9c\x14N[\x9c\xdd\xbf\x97LZ9:m\x90\x1f\xed\xac\xbf@g[[s\x12\xba:ov\xc8\x95C|\xa8\x89T\x9d\xc4J\x1b/umW\xc9O\xadt\xb5\xa4\x18CL\xcb\x8cS\xad\n=^\xe1\xe3\xbf\x05\x9aP\xd3\xeb\xb3$uJ\xd3\xd7\x80\xa5WB\xb7Xf\xcf\xa2\x0cf|Y}\x7fA\xbe>4\x1a1&7#\xcb\x14\xba\xcd\x84/?\xc...
_content_consumed: True
_next: None

问题原因及修复方案

1. 移除不必要的响应头

你在请求头里加入了大量服务器响应头(比如Access-Control-Allow-Origin、Cross-Origin-Opener-Policy、Content-Security-Policy等),这些是服务器返回给浏览器的字段,请求时携带会被目标网站识别为异常请求,触发403拦截。

2. 修正Referrer字段

目标网站可能校验请求来源,你设置的Referrer: http://localhost:5000/不符合要求,应该改成Investing.com的官方域名,比如https://www.investing.com/。

3. 处理压缩响应(可选)

请求头里的Accept-Encoding会让服务器返回gzip/br压缩内容,虽然requests默认会自动解码,但如果403问题解决后仍有乱码,可以先暂时移除该字段,或者确保requests启用自动解码。

4. 修正导入错误

代码开头导入了urllib.request但实际用的是requests.get,需要导入requests库。

5. 可选:加入浏览器Cookie

如果上述修改后仍返回403,可能需要从浏览器中复制访问该URL时的Cookie(在开发者工具的Network面板查看),加入到请求头中(注意Cookie有有效期)。

修正后的代码示例

import requests

url = 'https://sbcharts.investing.com/events_charts/us/38.json'

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36 Edg/114.0.1823.51',
    'Accept': 'application/json,text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
    'Accept-Language': 'en-US,en;q=0.9',
    'Referrer': 'https://www.investing.com/'
}

response = requests.get(url, headers=headers)
# 检查响应状态
if response.status_code == 200:
    print(response.json())
else:
    print(f"请求失败,状态码:{response.status_code}")
    print(response.text)

内容的提问来源于stack exchange,提问作者mike01010

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 02:59:54