Python requests调用Instagram接口报latin-1编码错误问题求助
报错触发原因
这个编码报错的核心来源不是请求提交的账号找回参数,是请求头字段的格式不符合HTTP规范:
- 所有HTTP请求头的内容必须满足latin-1编码范围(单字节、字符码值在0-255之间),超出范围的内容会直接在请求构造阶段触发编码错误,根本无法发送到Instagram服务端
- 你代码里
sec-ch-ua字段的取值混入了Unicode全角弯引号(对应报错里提到的\u201d字符),这个字符的码值远超latin-1的支持范围;这类问题通常是从浏览器开发者工具复制请求头时,复制内容被自动替换成全角字符导致的
具体修复操作
- 替换
sec-ch-ua字段的错误值:把原本乱加的全角弯引号、多余转义斜杠全部换成HTTP规范认可的ASCII直引号,正确格式参考:'sec-ch-ua': '"Google Chrome";v="89", "Chromium";v="89", ";Not A Brand";v="99"' - 移除headers里硬编码的
content-length字段:这个值不需要手动设置,requests会根据实际提交的表单数据长度自动计算,手动写死的固定值很容易和实际长度不匹配,导致请求被服务端拒绝 - 逐行检查headers里的所有字符串值,确认没有混入其他全角特殊字符,避免同类编码问题复发
修复后的可运行代码
import requests username = input('user: ') headers = { 'accept':'*/*', 'accept-encoding': 'gzip, deflate, br', 'accept-language': 'en-ZW,en-US;q=0.9,en;q=0.8', 'content-type': 'application/x-www-form-urlencoded', 'cookie': 'ig_cb=2; ig_did=9A4D7DF8-A4A7-4061-A279-9B69C4683ED2; mid=YED50AAEAAGr9ZEXMr25akKRsufT; shbid=14062; rur=ATN; shbts=1619229397.0332613; csrftoken=Pa0VXyUGq674IOlySdbKFFLSGmhHWXQu', 'origin': 'https://www.instagram.com', 'referer':'https://www.instagram.com/accounts/password/reset/', 'sec-ch-ua': '"Google Chrome";v="89", "Chromium";v="89", ";Not A Brand";v="99"', 'sec-ch-ua-mobile': '?1', 'sec-fetch-dest':'empty', 'sec-fetch-mode': 'cors', 'sec-fetch-site': 'same-origin', 'user-agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.128 Mobile Safari/537.36', 'x-csrftoken': 'Pa0VXyUGq674IOlySdbKFFLSGmhHWXQu', 'x-ig-app-id': '1217981644879628', 'x-ig-www-claim': 'hmac.AR1kp8P0iLWIGnK2piGMehJw2lZQaN68UqFoWWr4QtEB0gPY', 'x-instagram-ajax': '822bad258fea', 'x-requested-with': 'XMLHttpRequest' } data = { 'email_or_username': username } req = requests.post('https://www.instagram.com/accounts/account_recovery_send_ajax/', headers=headers , data=data).text print(req)
内容的提问来源于stack exchange,提问作者Suood Abdulaziz
相关产品推荐
相关产品推荐

