[Python] Авторизация и post json

Discussion in 'PHP' started by ololoman3, 11 Jun 2012.

  1. ololoman3

    ololoman3 New Member

    Joined:
    15 Nov 2011
    Messages:
    3
    Likes Received:
    0
    Reputations:
    0
    Взялся писать функию авторизации на рамблер-мейле. Отснифал пост-запросы. Непосредственно сам вход в аккаунт реализовал:
    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' запрос как-то криво обрезается при передаче.
    Кто-нибудь в курсе, как разрешить данный косяк?
     
  2. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    Покажите запросы, которые шлет реальный клиент.

    И постарайтесь почитать книги по питону полностью. То что вы пишете выглядит как копипаста из разных источников.

    Code:
    post=urllib.urlencode({"jsonrpc":"2.0","method":"Rambler::Mail::get_settings"})
    - Не создает json строку
     
    _________________________
  3. ololoman3

    ololoman3 New Member

    Joined:
    15 Nov 2011
    Messages:
    3
    Likes Received:
    0
    Reputations:
    0
    Логи запроса реального клиента таковы:
    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
    
    
    Где б ещё книги с системным изложением и без лишней воды найти... Того же Лутца тяжело целостно читать из-за размытости изложения и дублирования информации.
     
  4. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    Code:
    import json
    post=urllib.urlencode(
        json.dumps(
            {"jsonrpc":"2.0","method":"Rambler::Mail::get_settings"}
        )
    )
    
     
    _________________________
  5. ololoman3

    ololoman3 New Member

    Joined:
    15 Nov 2011
    Messages:
    3
    Likes Received:
    0
    Reputations:
    0
    У меня в версии 2.7 не выполняется данный вариант, по крайней мере. Urlencode вылетает из-за "нот вэлид нон-стринг сиквэнс о мэппинг обджэкт". В сети нашёл советы использовать метод quote_plus вместо urlencode, однако и это успеха не принесло - вызов urlopen начинает приводить к еррор 400.
     
  6. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    ololoman3 а, ну да, там нужен quote вместо urlencode. Попробуйте вообще оставить только json.dumps
     
    _________________________
  7. ololoman3

    ololoman3 New Member

    Joined:
    15 Nov 2011
    Messages:
    3
    Likes Received:
    0
    Reputations:
    0
    Пробовал в том числе и так) Первый json запрос отрабатывает успешно, на втором - 400 Бэд Риквэст. Фраза из рекламы "и чем я его только не пробовала" становится суровой реальностью :D
     
    #7 ololoman3, 11 Jun 2012
    Last edited: 11 Jun 2012
  8. ololoman3

    ololoman3 New Member

    Joined:
    15 Nov 2011
    Messages:
    3
    Likes Received:
    0
    Reputations:
    0
    Всем спасибо за внимание, проблема решена. Экспериментальным путём выяснил, что необходимо явно перезадавать переменную request после каждого вызова метода urlopen:
    Code:
    request=urllib2.Request('http://email.rambler.ru/jsonrpc', None, {"Content-Type": "application/json"})
    Если данный этап пропустить, следующий вызов urlopen сыпется - хз почему.
     
Loading...