Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Python中重新创建此PHP代码?_Php_Python_Http_Forms_Automation - Fatal编程技术网

如何在Python中重新创建此PHP代码?

如何在Python中重新创建此PHP代码?,php,python,http,forms,automation,Php,Python,Http,Forms,Automation,我发现了一个PHP脚本,可以让我做我在这个问题上提出的事情。我可以很好地使用它,但出于好奇,我想用Python重新创建以下代码 我当然可以使用urllib2来获取页面,但我不知道如何处理cookies,因为mechanize(在Windows上使用Python 2.5和2.6进行测试,在Ubuntu上使用Python 2.5进行测试……所有这些都是最新的mechanize版本)似乎在页面上出现问题。如何在python中实现这一点 require_once "HTTP/Request.php";

我发现了一个PHP脚本,可以让我做我在这个问题上提出的事情。我可以很好地使用它,但出于好奇,我想用Python重新创建以下代码

我当然可以使用urllib2来获取页面,但我不知道如何处理cookies,因为mechanize(在Windows上使用Python 2.5和2.6进行测试,在Ubuntu上使用Python 2.5进行测试……所有这些都是最新的mechanize版本)似乎在页面上出现问题。如何在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']);

我不熟悉PHP,但这可能会让您开始学习。 我在这里安装了opener,它将应用于urlopen方法。如果不想“安装”opener,可以直接使用opener对象。(opener.open(url,数据))

参考:


与monkut的答案相似,但更简洁一点

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
导入urllib,urllib2 def steam_登录(用户名、密码): data=urllib.urlencode({ “动作”:“多洛金”, “goto”:“, “steamAccountName”:用户名, “蒸汽密码”:密码, }) 请求=urllib2。请求('https://steamcommunity.com/",数据) cookie_handler=urllib2.HTTPCookieProcessor() opener=urlib2.build\u opener(cookie\u处理程序) 响应=opener.open(请求)
如果不是200@Beau Martinez引用freenode#python频道中的主题“现在使用python 3.x还为时过早”,Beau,3.x有很多不一致之处(以wsgiref为例)。从2.x移动到3.x(使用2to3)很容易,但是没有办法轻易地从另一个方向移动。你和MizardX的答案都是+1。。。他们会完美结合:-)你和monkut的答案都是+1。。。它们会完美结合:-)很好,我不熟悉urllib2.Request对象。这可以更好地映射到Therms PHP。
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