调用返回500错误的API爬取学校数据遇阻求助
解决POST请求返回500错误的问题
核心原因:缺少POST请求体
POST接口几乎都需要传递请求参数(请求体),你的代码只设置了请求头,没有向API发送搜索所需的核心参数,这是导致服务器返回500错误的关键原因。
获取正确请求体的方法
打开浏览器开发者工具(F12)切换到「网络」标签,重新加载目标页面,找到向/api/v1/search/发送的POST请求,查看「载荷」(Payload)部分,就能看到需要传递的参数格式。
以目标页面为例,正确的请求体JSON格式如下:
{ "zoektermen": "rotterdam", "type": "middelbare-scholen", "weergave": "Lijst", "pagina": 1, "aantalPerPagina": 10 }
修改后的可运行代码示例
import requests def data_fetch(): url = "https://scholenopdekaart.nl/api/v1/search/" headers = { 'accept': 'application/json, text/plain, */*', 'content-type': 'application/json', 'referer': 'https://scholenopdekaart.nl/zoeken/middelbare-scholen/?zoektermen=rotterdam&weergave=Lijst', 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', } # 传递必要的搜索参数 payload = { "zoektermen": "rotterdam", "type": "middelbare-scholen", "weergave": "Lijst", "pagina": 1, "aantalPerPagina": 10 } response = requests.post(url, headers=headers, json=payload) print(response.status_code) # 解析并提取目标数据 if response.status_code == 200: data = response.json() for school in data.get('resultaten', []): print(f"学校名称: {school.get('naam')}, 邮箱: {school.get('email')}") data_fetch()
额外排查点
- CSRF Token验证:若仍报错,可在页面HTML中查找
csrf-token元标签,将其值添加到请求头的X-CSRFToken字段。 - 请求头格式:确保
sec-ch-ua等字段与浏览器请求完全一致,注意引号的正确使用(可直接复制浏览器中的请求头)。 - 参数编码:使用
json=payload而非data=payload,让requests自动处理JSON编码和Content-Type设置。
内容的提问来源于stack exchange,提问作者theycallmepix
相关产品推荐
相关产品推荐

