使用Python发送POST请求下载网站CSV返回500错误该如何解决
问题原因与解决方案
500错误属于服务端内部错误,该场景下几乎都是因为你发送的请求格式、参数和浏览器正常导出时发送的请求不一致,导致服务端解析请求失败。你当前写的代码存在明显的传参错误,按以下步骤排查修改即可:
- 修正请求传参的基础写法
你写的requests.post('https://provepip.ipex.it/PipWa/Front/GetCsv', 'ExportData.csv')完全不符合requests的调用规则:requests.post的第二个位置参数对应的是请求体数据,你直接传入文件名字符串,和接口要求的请求体格式完全不符,自然会触发服务端报错。
先回到浏览器的Network标签页,找到手动导出CSV时对应的POST请求,查看「请求负载/Payload」模块,把接口要求的所有请求参数完整抄下来,按接口要求的格式传递:- 如果接口要求表单格式传参,把参数组装为字典传给
data参数:import requests # 键值对替换为你从浏览器抄的实际请求参数 payload = { "param1": "value1", "param2": "value2" } resp = requests.post('https://provepip.ipex.it/PipWa/Front/GetCsv', data=payload) - 如果接口要求JSON格式传参,把参数组装为字典传给
json参数:resp = requests.post('https://provepip.ipex.it/PipWa/Front/GetCsv', json=payload)
- 如果接口要求表单格式传参,把参数组装为字典传给
- 补全请求头与身份凭证
大部分需要登录的网站接口都会校验请求头和身份信息,你同样从浏览器的请求详情里复制「请求头/Request Headers」的必要字段,加到请求的headers参数里,常规需要补充的字段包括User-Agent、Referer、Content-Type、Cookie等:headers = { "User-Agent": "替换为你当前浏览器的UA值", "Cookie": "替换为你浏览器中当前站点的登录Cookie", "Content-Type": "替换为浏览器请求中对应的Content-Type值,比如application/json、application/x-www-form-urlencoded" } resp = requests.post('https://provepip.ipex.it/PipWa/Front/GetCsv', json=payload, headers=headers) - 导出CSV到本地
先判断请求状态码为200后,再把响应内容写入本地文件,如果请求失败可以打印响应文本定位具体错误原因:if resp.status_code == 200: with open("ExportData.csv", "wb") as f: f.write(resp.content) else: print("请求失败,服务端返回错误信息:", resp.text)
内容的提问来源于stack exchange,提问作者nms_data
相关产品推荐
相关产品推荐

