Взялся писать функию авторизации на рамблер-мейле. Отснифал пост-запросы. Непосредственно сам вход в аккаунт реализовал: Code: request=urllib2.Request('http://id.rambler.ru/script/auth.cgi', None, ua) opener=urllib2.build_opener(urllib2.HTTPCookieProcessor()) urllib2.install_opener(opener) post='back=http%3A%2F%2Fmail.rambler.ru%2F&login='+login+'&domain='domain+'&passw='+pass page=urllib2.urlopen(request, post, 20).read() Однока помимо этого браузер при логине отсылает также json пост-запросы на адрес http://email.rambler.ru/jsonrpc, в частности: {"jsonrpc":"2.0","method":"Rambler::Mail::get_settings"} {"jsonrpc":"2.0","method":"Rambler::Mail::get_mailbox_folders"} Первый запрос вроде успешно проэмулирован мной следующим способом: Code: post=urllib.urlencode({"jsonrpc":"2.0","method":"Rambler::Mail::get_settings"}) request=urllib2.Request('http://mail.rambler.ru/jsonrpc', None, ua) page=urllib2.urlopen(request, post,20).read() Однако, когда я пытаюсь повторить действия по аналогии со вторым, получаю в ответ: {"jsonrpc":"2.0","result":{"error":{"errno":-9,"strerror":"RPC Call `Rambler::Mail::get_mailbox_` not supported yet."},"partner":{"remote_ip":my_ip},"status":"ERROR"}} Судя по 'RPC Call `Rambler::Mail::get_mailbox_` not supported' запрос как-то криво обрезается при передаче. Кто-нибудь в курсе, как разрешить данный косяк?
Покажите запросы, которые шлет реальный клиент. И постарайтесь почитать книги по питону полностью. То что вы пишете выглядит как копипаста из разных источников. Code: post=urllib.urlencode({"jsonrpc":"2.0","method":"Rambler::Mail::get_settings"}) - Не создает json строку
Логи запроса реального клиента таковы: Code: http://email.rambler.ru/jsonrpc POST /jsonrpc HTTP/1.1 Host: email.rambler.ru User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13 sputnik 2.3.0.101 Accept: application/json, text/javascript, */*; q=0.01 Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3 Accept-Encoding: gzip,deflate Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7 Keep-Alive: 115 Connection: keep-alive Content-Type: application/json; charset=UTF-8 X-Requested-With: XMLHttpRequest Referer: http://email.rambler.ru/ Content-Length: 56 Cookie: ruid=+PcHBmOYaE9HCAAAAVNA1AB=; dvr=gAAAAEAAAAAAAAAAAAAAAAAAAAAAAAA:1338536460; lvr=1338536538; prmtpl=mail_newlife:contacts_again_alive|1339144922344; __utma=21227320.1641036332.1335664601.1335664601.1338540124.2; __utmz=21227320.1335664601.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); iruid=PUQMBoi9Mk7yjAAAAUUfsQB=; __utma=1.396173346.1335666102.1335666102.1338540205.2; __utmz=1.1338540205.2.2.utmcsr=rambler.ru|utmccn=(referral)|utmcmd=referral|utmcct=/; _r_test_cook=1; __utmb=21227320.1.10.1338540124; __utmc=21227320; rftrsftprm=shown; rsid=a9b6b78c863e621a0c68f7546db717ac; rdomain=lenta.ru; rlogin=daria_butorina_94; rup=AO2mddE*hlM0umqPC6*3fMg_; nrup=mlGIlCbor71aP2gBTSyCNw__; rassist=eae9; rha=fefb8fb9f4881e1ec4d6af2dccdc18e3; __utmb=1.1.10.1338540205; __utmc=1 Pragma: no-cache Cache-Control: no-cache {"jsonrpc":"2.0","method":"Rambler::Mail::get_settings"} HTTP/1.1 200 OK Server: nginx/1.1.0 Date: Fri, 01 Jun 2012 07:42:24 GMT Content-Type: text/x-json; charset=utf-8 Connection: keep-alive X-Powered-By: C++ Application Server v3.5.6(Fresco) X-Module: RamblerId::CheckRSIDX, RamblerId::CheckSession, Rambler::Mail::get_settings Content-Length: 885 http://email.rambler.ru/jsonrpc POST /jsonrpc HTTP/1.1 Host: email.rambler.ru User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13 sputnik 2.3.0.101 Accept: application/json, text/javascript, */*; q=0.01 Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3 Accept-Encoding: gzip,deflate Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7 Keep-Alive: 115 Connection: keep-alive Content-Type: application/json; charset=UTF-8 X-Requested-With: XMLHttpRequest Referer: http://email.rambler.ru/ Content-Length: 63 Cookie: ruid=+PcHBmOYaE9HCAAAAVNA1AB=; dvr=gAAAAEAAAAAAAAAAAAAAAAAAAAAAAAA:1338536460; lvr=1338536538; prmtpl=mail_newlife:contacts_again_alive|1339144922344; __utma=21227320.1641036332.1335664601.1335664601.1338540124.2; __utmz=21227320.1335664601.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); iruid=PUQMBoi9Mk7yjAAAAUUfsQB=; __utma=1.396173346.1335666102.1335666102.1338540205.2; __utmz=1.1338540205.2.2.utmcsr=rambler.ru|utmccn=(referral)|utmcmd=referral|utmcct=/; _r_test_cook=1; __utmb=21227320.1.10.1338540124; __utmc=21227320; rftrsftprm=shown; rsid=a9b6b78c863e621a0c68f7546db717ac; rdomain=lenta.ru; rlogin=daria_butorina_94; rup=AO2mddE*hlM0umqPC6*3fMg_; nrup=mlGIlCbor71aP2gBTSyCNw__; rassist=eae9; rha=fefb8fb9f4881e1ec4d6af2dccdc18e3; __utmb=1.1.10.1338540205; __utmc=1 Pragma: no-cache Cache-Control: no-cache {"jsonrpc":"2.0","method":"Rambler::Mail::get_mailbox_folders"} HTTP/1.1 200 OK Server: nginx/1.1.0 Date: Fri, 01 Jun 2012 07:42:24 GMT Content-Type: text/x-json; charset=utf-8 Connection: keep-alive X-Powered-By: C++ Application Server v3.5.6(Fresco) X-Module: RamblerId::CheckRSIDX, RamblerId::CheckSession, Rambler::Mail::get_mailbox_folders Content-Length: 698 http://email.rambler.ru/jsonrpc POST /jsonrpc HTTP/1.1 Host: email.rambler.ru User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13 sputnik 2.3.0.101 Accept: application/json, text/javascript, */*; q=0.01 Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3 Accept-Encoding: gzip,deflate Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7 Keep-Alive: 115 Connection: keep-alive Content-Type: application/json; charset=UTF-8 X-Requested-With: XMLHttpRequest Referer: http://email.rambler.ru/ Content-Length: 160 Cookie: ruid=+PcHBmOYaE9HCAAAAVNA1AB=; dvr=gAAAAEAAAAAAAAAAAAAAAAAAAAAAAAA:1338536460; lvr=1338536538; prmtpl=mail_newlife:contacts_again_alive|1339144922344; __utma=21227320.1641036332.1335664601.1335664601.1338540124.2; __utmz=21227320.1335664601.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); iruid=PUQMBoi9Mk7yjAAAAUUfsQB=; __utma=1.396173346.1335666102.1335666102.1338540205.2; __utmz=1.1338540205.2.2.utmcsr=rambler.ru|utmccn=(referral)|utmcmd=referral|utmcct=/; _r_test_cook=1; __utmb=21227320.1.10.1338540124; __utmc=21227320; rftrsftprm=shown; rsid=a9b6b78c863e621a0c68f7546db717ac; rdomain=lenta.ru; rlogin=daria_butorina_94; rup=AO2mddE*hlM0umqPC6*3fMg_; nrup=mlGIlCbor71aP2gBTSyCNw__; rassist=eae9; rha=fefb8fb9f4881e1ec4d6af2dccdc18e3; __utmb=1.1.10.1338540205; __utmc=1 Pragma: no-cache Cache-Control: no-cache {"jsonrpc":"2.0","method":"Rambler::Mail::get_folder_messages","params":[{"folder.name":"INBOX","folder.sortorder":"D","folder.offset":0,"folder.elements":50}]} HTTP/1.1 200 OK Server: nginx/1.1.0 Date: Fri, 01 Jun 2012 07:42:26 GMT Content-Type: text/x-json; charset=utf-8 Connection: keep-alive X-Powered-By: C++ Application Server v3.5.6(Fresco) X-Module: RamblerId::CheckRSIDX, RamblerId::CheckSession, Rambler::Mail::get_folder_messages Content-Length: 162 Где б ещё книги с системным изложением и без лишней воды найти... Того же Лутца тяжело целостно читать из-за размытости изложения и дублирования информации.
Code: import json post=urllib.urlencode( json.dumps( {"jsonrpc":"2.0","method":"Rambler::Mail::get_settings"} ) )
У меня в версии 2.7 не выполняется данный вариант, по крайней мере. Urlencode вылетает из-за "нот вэлид нон-стринг сиквэнс о мэппинг обджэкт". В сети нашёл советы использовать метод quote_plus вместо urlencode, однако и это успеха не принесло - вызов urlopen начинает приводить к еррор 400.
Пробовал в том числе и так) Первый json запрос отрабатывает успешно, на втором - 400 Бэд Риквэст. Фраза из рекламы "и чем я его только не пробовала" становится суровой реальностью
Всем спасибо за внимание, проблема решена. Экспериментальным путём выяснил, что необходимо явно перезадавать переменную request после каждого вызова метода urlopen: Code: request=urllib2.Request('http://email.rambler.ru/jsonrpc', None, {"Content-Type": "application/json"}) Если данный этап пропустить, следующий вызов urlopen сыпется - хз почему.