Python bu PHP kodu yeniden nasıl?

1 Cevap php

Ben bana this SO soruda ne olanak sağlayan bir PHP komut dosyası buldum. Ben sadece iyi kullanabilir, ama meraktan ben Python aşağıdaki kodu yeniden istiyorum.

Ben tabii sayfasını almak için urllib2 kullanabilirsiniz, ancak (... tüm son Mechanize sürümü ile Ubuntu Windows ve Python 2.5 Python 2.5 ve 2.6 ile test) Mechanize görünüyor çünkü ben tanımlama bilgilerini işlemek için nasıl bir kayıp değilim sayfada kırmak için. Ben bu Python nasıl yapabilirim?

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']);

1 Cevap

Monkut cevabı benzer, ama biraz daha kısa.

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

Bu, diğer istekleri kullanabileceğiniz çerez kavanoz döndürür. Sadece HTTPCookieProcessor kurucusuna onu geçmek.

monkut cevabı istekleri arasında çerezleri saklar, hangi küresel HTTPCookieProcessor yükler. Benim çözüm küresel durumunu değiştirmez.