Пробую тут передать данные на страницу с формами(multipart/form-data) на сайт. Столкнулся с проблемой кодировок. Итак суть:
1. сайт в кодировке Windows-1251
2. файл, в котором идут поля которые нужно передать в кодировке Windows-1251
3. Пример скрипта, тоже в cp1251, запускается на FreeBSD:
#!/usr/bin/env python3 # -*- coding: cp1251 -*- import requests def main(): f = open('/var/ftp/file.txt','r', encoding='cp1251') s_cp1251 = f.read() postdata = { "TopicTitle" : s_cp1251, "TopicDesc" : 'тест', "Post" : 'тест' } headers = { 'User-Agent' : 'Mozilla/5.0 (Windows NT 5.1; rv:20.0) Gecko/20100101 Firefox/20.0', 'Accept' : 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 'Accept-Language' : 'en-US,en;q=0.5', 'Accept-Encoding' : 'gzip, deflate', 'Connection' : 'keep-alive' } s = requests.Session() s.encoding = 'Windows-1251' q = s.post('http://site.com/index.php?', headers=headers, data=postdata, files={'':''}) print(q.status_code) if __name__ == '__main__': main()
Данные передает, но в форме странный текст: тест
Я так понимаю, POST по стандарту передает в utf-8, вот почему такой результат. Как заставить передавать его в Windows-1251 ?
Буду благодарен за любой совет или пинок в правильную сторону
———
П.С. кому интересно решение и нет охоты читать все ответы, то тут все просто, возможности передать cp1251 через multipart/form-data в Python 3/requests пока нет. Только UTF-8. Так что передавайте data=postdata через form-urlencoded