Как воссоздать этот код PHP в Python? - PullRequest
0 голосов
/ 12 июня 2009

Я нашел PHP-скрипт, который позволяет мне делать то, что я задал в этом ТАКом вопросе. Я могу использовать это очень хорошо, но из любопытства я хотел бы воссоздать следующий код в Python.

Конечно, я могу использовать urllib2, чтобы получить страницу, но я не знаю, как обращаться с файлами cookie после механизации (протестировано с Python 2.5 и 2.6 в Windows и Python 2.5 в Ubuntu ... все с последней механизацией версия), кажется, ломается на странице. Как мне сделать это в Python?

require_once "HTTP/Request.php";

$req = &new HTTP_Request('https://steamcommunity.com');
$req->setMethod(HTTP_REQUEST_METHOD_POST);

$req->addPostData("action", "doLogin");
$req->addPostData("goto", "");

$req->addPostData("steamAccountName", ACC_NAME);
$req->addPostData("steamPassword", ACC_PASS);

echo "Login: ";

$res = $req->sendRequest();
if (PEAR::isError($res))
  die($res->getMessage());

$cookies = $req->getResponseCookies();
if ( !$cookies )
  die("fail\n");

echo "pass\n";

foreach($cookies as $cookie)
  $req->addCookie($cookie['name'],$cookie['value']);

Ответы [ 2 ]

6 голосов
/ 12 июня 2009

Аналогично ответу Монкута, но немного более кратко.

import urllib, urllib2

def steam_login(username,password):
    data = urllib.urlencode({
      'action': 'doLogin',
      'goto': '',
      'steamAccountName': username,
      'steamPassword': password,
    })
    request = urllib2.Request('https://steamcommunity.com/',data)
    cookie_handler = urllib2.HTTPCookieProcessor()
    opener = urllib2.build_opener(cookie_handler)
    response = opener.open(request)
    if not 200 <= response.code < 300:
        raise Exception("HTTP error: %d %s" % (response.code,response.msg))
    else:
        return cookie_handler.cookiejar

Возвращает банку печенья, которую вы можете использовать в других запросах. Просто передайте его конструктору HTTPCookieProcessor.

Ответ Monkut устанавливает глобальный HTTPCookieProcessor, который хранит куки между запросами. Мое решение не изменяет глобальное состояние.

5 голосов
/ 12 июня 2009

Я не знаком с PHP, но это может помочь вам начать. Я устанавливаю открывашку, которая будет применяться к методу urlopen. Если вы не хотите «устанавливать» сошники, вы можете напрямую использовать их. (opener.open (url, data)).

Обратитесь к: http://docs.python.org/library/urllib2.html?highlight=urllib2#urllib2.install_opener

import urlib2
import urllib

# 1 create handlers
cookieHandler = urllib2.HTTPCookieProcessor() # Needed for cookie handling
redirectionHandler = urllib2.HTTPRedirectHandler() # needed for redirection

# 2 apply the handler to an opener                                                  
opener = urllib2.build_opener(cookieHandler, redirectionHandler)

# 3. Install the openers
urllib2.install_opener(opener)

# prep post data
datalist_tuples = [ ('action', 'doLogin'),
                    ('goto', ''),
                    ('steamAccountName', ACC_NAME),
                    ('steamPassword', ACC_PASS)

                   ]
url = 'https://steamcommunity.com'
post_data = urllib.urlencode(datalist_tuples)
resp_f = urllib2.urlopen(url, post_data)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...