使用Python requests自动化phishcheck.me URL检测遇格式错误
Fixing "Malformed URL" Error When Automating phishcheck.me in Python
我之前帮朋友调试过phishcheck.me的自动化检测脚本,刚好碰到过一模一样的Malformed URL问题,大概率是这几个细节没处理到位,给你一步步拆解解决:
常见原因&对应解决方案
1. 待检测URL未正确编码
phishcheck.me的接口要求传入的目标URL必须是URL编码后的格式,尤其是当你的待检测URL包含&、=、空格或者特殊字符时,直接传递会把请求参数拆乱,导致服务器识别为格式错误。
解决方法:用Python的urllib.parse.quote()对目标URL进行全编码:
import urllib.parse # 示例待检测URL target_url = "https://suspicious-site.com/login?user=test&pass=123" # safe设为空字符串,确保所有特殊字符都被编码 encoded_url = urllib.parse.quote(target_url, safe='')
2. Cookie格式错误
很多人会直接把浏览器里复制的Cookie字符串丢给requests,但如果字符串里有多余空格、换行,或者用错了传递方式,就会触发格式错误。
更稳妥的方式是用字典形式传递Cookie:
# 从浏览器开发者工具的请求头里复制Cookie字段,拆成键值对 cookies = { "PHPSESSID": "abc123xyz456", # 替换成你实际的会话ID "accept_cookies": "1", # 其他你在截图里看到的Cookie字段 }
如果一定要用字符串形式,确保格式严格是key1=value1; key2=value2,不要有任何多余符号或换行。
3. 请求构造不匹配浏览器请求
phishcheck.me的服务器会校验请求的方法(GET/POST)、参数位置、请求头,和浏览器里的请求不一致也会报错。
按照你截图里的请求方式,构造完全一致的请求:
import requests # 替换成截图里的实际检测端点 api_url = "https://phishcheck.me/api/check" headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36", "Referer": "https://phishcheck.me/", # 其他截图里的请求头字段 } # 假设是POST请求,参数放在form data里(替换成截图里的实际参数名) payload = { "url_to_check": encoded_url } response = requests.post(api_url, cookies=cookies, data=payload, headers=headers) # 打印请求详情,方便排查差异 print("实际发送的URL:", response.request.url) print("请求头:", response.request.headers) print("响应内容:", response.text)
排查小技巧
- 把编码后的URL拼到浏览器的检测接口里手动测试,确认编码后的URL是有效的。
- 用浏览器开发者工具(F12)对比Python发送的请求和浏览器请求的所有细节,包括Cookie、Headers、参数、请求方法,找出差异点。
如果还有问题,可以把你当前的代码片段和请求截图里的关键信息(比如端点、参数名)贴出来,我再帮你细化。
内容的提问来源于stack exchange,提问作者RobertPro
相关产品推荐
相关产品推荐

