使用urllib发送请求时遇Invalid URL错误:URL含控制字符
解决urllib请求URL时的控制字符报错问题
问题描述
使用urllib请求如下URL时触发报错:
https://openapi.naver.com/v1/search//shop.json?query=%EB%AA%B0%EC%8A%A4%ED%82%A8 &start=10&disp=3
错误提示:
URL can't contain control characters. '/v1/search//shop.json?query=%EB%AA%B0%EC%8A%A4%ED%82%A8 &start=10&disp=3' (found at least ' ')
解决步骤
移除URL中的多余空格
报错根源是query参数值末尾的空格(%EB%AA%B0%EC%8A%A4%ED%82%A8),URL不允许存在未编码的空格,直接删除空格即可。修正后的URL:https://openapi.naver.com/v1/search//shop.json?query=%EB%AA%B0%EC%8A%A4%ED%82%A8&start=10&disp=3优化URL中的冗余斜杠(可选但推荐)
URL里的/v1/search//shop.json包含连续双斜杠,虽然多数服务器能正常解析,但建议改为单斜杠避免潜在问题:https://openapi.naver.com/v1/search/shop.json?query=%EB%AA%B0%EC%8A%A4%ED%82%A8&start=10&disp=3完整请求示例代码
调用Naver开放API需要添加认证请求头,以下是可运行的urllib请求代码:import urllib.request import json # 替换为你的Naver API凭证 client_id = "你的Client ID" client_secret = "你的Client Secret" url = "https://openapi.naver.com/v1/search/shop.json?query=%EB%AA%B0%EC%8A%A4%ED%82%A8&start=10&disp=3" headers = { "X-Naver-Client-Id": client_id, "X-Naver-Client-Secret": client_secret } req = urllib.request.Request(url, headers=headers) try: response = urllib.request.urlopen(req) if response.getcode() == 200: json_result = json.loads(response.read().decode('utf-8')) print(json_result) else: print(f"请求失败,状态码: {response.getcode()}") except Exception as e: print(f"请求异常: {str(e)}")
关键说明
urllib对URL格式校验严格,任何未编码的空白字符、控制字符都会触发报错。如果需要在参数中包含空格,需用%20编码,但此案例中空格属于多余输入,直接删除即可。
内容的提问来源于stack exchange,提问作者Sea Yoon
相关产品推荐
相关产品推荐

