如何在Python POST请求中发送阿拉伯语文本作为参数?
阿拉伯语参数POST请求实现方案
编码必要性说明
HTTP协议传输application/x-www-form-urlencoded格式的POST参数时,要求非ASCII字符必须做百分号编码(URL编码),否则会出现乱码导致请求校验失败。目前绝大多数站点默认采用UTF-8编码处理阿拉伯语等非拉丁字符,因此需要基于UTF-8对阿拉伯语文本做编码处理。
代码实现
使用requests库(推荐)
requests库内置自动编码逻辑,无需手动处理转义,直接传递原始阿拉伯语文本即可:
import requests login_url = "目标站点登录接口地址" post_params = { "txt": "مرحبا" } # requests会自动将参数按照UTF-8编码后做URL转义 resp = requests.post(login_url, data=post_params) # 可通过以下代码查看实际发送的编码后参数 print("实际请求参数:", resp.request.body)
使用Python内置urllib库
如果需要用原生库实现,手动执行编码逻辑即可:
import urllib.parse import urllib.request login_url = "目标站点登录接口地址" post_params = { "txt": "مرحبا" } # 按UTF-8编码后做URL转义,再转换为bytes格式 encoded_params = urllib.parse.urlencode(post_params, encoding="utf-8").encode("utf-8") req = urllib.request.Request(login_url, data=encoded_params, method="POST") resp = urllib.request.urlopen(req)
异常适配
如果上述代码请求仍然失败,可确认目标站点是否采用阿拉伯语专用编码Windows-1256(仅部分老旧站点使用),将代码中的encoding参数值替换为cp1256即可适配。
内容的提问来源于stack exchange,提问作者Abdalrahman_Ayed
相关产品推荐
相关产品推荐

