You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python requests无法请求Punycode域名?求有效解决方法

简便请求Punycode域名的方法

你遇到的问题是因为带特殊字符的域名需要转换为Punycode(IDNA编码)格式,你使用的urllib3 1.26.13版本无法自动处理这类非ASCII域名,导致requests解析URL失败。

下面是两种简便的解决方法:

方法一:直接转换域名后请求

import requests
from encodings.idna import ToASCII

# 将含特殊字符的域名转成Punycode
puny_domain = ToASCII("💩.la").decode('ascii')
# 拼接成可识别的URL并请求
response = requests.get(f"https://{puny_domain}")
print(response.status_code)

方法二:拆分URL后编码域名

如果URL包含路径、参数等复杂内容,推荐用这种方式处理整个URL:

import requests
from urllib.parse import urlsplit, urlunsplit

original_url = "https://💩.la"
# 拆分URL各部分
url_parts = urlsplit(original_url)
# 对域名进行IDNA编码
puny_domain = url_parts.netloc.encode('idna').decode('ascii')
# 重新拼接URL
processed_url = urlunsplit((url_parts.scheme, puny_domain, url_parts.path, url_parts.query, url_parts.fragment))
# 发起请求
response = requests.get(processed_url)
print(response.status_code)

转换后的💩.la会变成标准Punycode格式的xn--ls8h.la,这是服务器能识别的域名格式,就能正常发起请求了。

内容的提问来源于stack exchange,提问作者Aviv

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 01:25:18