使用Python Requests发送带查询字符串的GET请求参数被剥离求助
解决requests发送GET请求时查询字符串被剥离的问题
Hey,我来帮你排查这个问题——我之前也遇到过类似的情况,requests自动剥离查询字符串通常不是库本身的bug,大概率是用法错误或者目标网站的反爬机制在搞鬼。咱们一步步来分析:
1. 先检查你是否用错了requests的参数传递方式
其实完全不需要手动用urllib.parse.urlencode(),requests本身就会自动帮你处理参数的编码和URL拼接。你可能犯了一个常见错误:要么把参数手动拼到了URL里,又同时传入了params参数,导致冲突;要么params字典本身有问题。
正确的打开方式应该是这样(我补全了你截断的部分参数,你可以根据实际需求调整):
import requests # 只保留干净的基础URL,不要手动拼参数 url = 'https://www.booking.com/searchresults.html' params = { 'checkin_monthday': '19', 'checkin_year': '2018', 'checkout_month': '4', 'checkout_monthday': '20', 'checkout_year': '2018', 'class_interval': 1, 'dest_id': -1022488, 'dest_type': 'city', 'dtdisc': 0, 'from_sf': 1, # 补全你截断的参数,比如成人数量、房间数 'group_adults': 2, 'no_rooms': 1 } # 发送请求时直接传params response = requests.get(url, params=params) # 关键:打印实际请求的URL,验证参数是否正确拼接 print("实际请求URL:", response.url)
运行这段代码后,看打印出的URL,就能直观看到参数有没有被正确带上。
2. 警惕Booking.com的反爬机制
Booking.com有非常严格的反爬策略,如果你的请求没有模拟浏览器的行为,服务器可能会直接把你重定向到不带参数的页面,看起来就像是查询字符串被剥离了。这种情况下,你需要添加合理的请求头来伪装:
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', 'Referer': 'https://www.booking.com/' } # 加上allow_redirects=False,看看是不是被重定向了 response = requests.get(url, params=params, headers=headers, allow_redirects=False) print("状态码:", response.status_code) print("实际请求URL:", response.url)
如果状态码是3xx(比如302),那基本可以确定是被反爬重定向了,这时候可能还需要添加Cookie或者其他请求头,或者考虑使用会话保持(requests.Session())。
3. 检查你的参数是否完整
你提供的代码里params的group_adul...是截断的,缺失必要参数也可能导致服务器拒绝你的请求,进而重定向到无参数页面。一定要确保所有必填参数都完整,并且格式正确(比如数字类型的参数,requests会自动帮你转换为字符串,不用特意处理)。
最后验证小技巧
每次请求后,先看response.status_code:
- 如果是200,再看
response.url是否带参数; - 如果是3xx,说明被重定向了,重点排查反爬和参数完整性;
- 如果是4xx,说明请求本身有问题(比如参数错误、权限不足)。
内容的提问来源于stack exchange,提问作者ganesh
相关产品推荐
相关产品推荐

