Dus*_*att 0 php python forms automation http
我找到了一个PHP脚本,让我做什么,我问这个太问题.我可以很好地使用它,但出于好奇,我想在Python中重新创建以下代码.
我当然可以使用urllib2来获取页面,但是我对如何处理cookie感到茫然,因为机械化(在Windows上使用Python 2.5和2.6以及在Ubuntu上使用Python 2.5进行测试...所有使用最新的机械化版本)似乎打破页面.我怎么在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']);
Run Code Online (Sandbox Code Playgroud)
类似于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
Run Code Online (Sandbox Code Playgroud)
它返回cookie jar,您可以在其他请求中使用它.只需将其传递给HTTPCookieProcessor
构造函数即可.
monkut的答案安装了一个global HTTPCookieProcessor
,它在请求之间存储cookie.我的解决方案不会修改全局状态.
我不熟悉PHP,但这可能会让你开始.我正在这里安装opener,它将把它应用到urlopen方法.如果您不想"安装"开启者,可以直接使用开启者对象.(opener.open(url,data)).
请参阅:http: //docs.python.org/library/urllib2.html?highlightlight = 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)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
519 次 |
最近记录: |