学习了一下 Python 淘宝系列(三): 模拟登陆成功后获取购物车信息
关于淘宝登陆验证的东西,里面牵扯到一个叫token,一个叫sp的两个东西~
自己用IE11试了一下,果然有那么些。
因为是网页登陆的,里面POST的参数跟教程中的有些许不用,特别是’TPL_password’字段,网页登陆时是空的。有可能是里面的参数的问题,估计是网页登陆还调用了其他处理密码的JS。
Categories
学习了一下 Python 淘宝系列(三): 模拟登陆成功后获取购物车信息
关于淘宝登陆验证的东西,里面牵扯到一个叫token,一个叫sp的两个东西~
自己用IE11试了一下,果然有那么些。
因为是网页登陆的,里面POST的参数跟教程中的有些许不用,特别是’TPL_password’字段,网页登陆时是空的。有可能是里面的参数的问题,估计是网页登陆还调用了其他处理密码的JS。
本文转载自http://www.crifan.com/python_http_post_request_with_cookie/
已经实现了如何获得对应的cookie,具体参考:
【已解决】Python中如何获得访问网页所返回的cookie
现在想要把已获得cookie,在http的提交post请求的时候,也同时发送过去。
即,实现带cookie的http的post。
【解决过程】
1.看了这里
http://www.ideawu.net/blog/archives/270.html
的介绍,好像是cookiejar,自动管理的,不需要手动指定之前已有的cookie了。
去写代码试试。
2.后来的结果证实了,接下来,直接调用urllib2.Request,其自动会把cookie送过去的,
因为之前已经是urllib2.build_opener,添加了对应cookiejar去自动管理cookie了。
对应的代码如下:
# first url request
baiduSpaceEntryUrl = "http://hi.baidu.com/motionhouse";
cj = cookielib.CookieJar();
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj));
urllib2.install_opener(opener);
resp = urllib2.urlopen(baiduSpaceEntryUrl);
# second time do url request, the cookiejar will auto handle the cookie
loginBaiduUrl = "https://passport.baidu.com/?login";
para = {
'username' : username,
'password' : password,
'mem_pass' : 'on',
};
postData = urllib.urlencode(para);
req = urllib2.Request(loginBaiduUrl, postData); # urllib2.Request: the HTTP request will be a POST instead of a GET when the data parameter is provided.
req.add_header('User-Agent', gConst['userAgentIE9']);
req.add_header('Content-Type', 'application/x-www-form-urlencoded');
req.add_header('Cache-Control', 'no-cache');
req.add_header('Accept', '*/*');
req.add_header('Connection', 'Keep-Alive');
resp = urllib2.urlopen(req);
respInfo = resp.info();
【总结】
Python中的cookiejar,自动帮我们管理好cookie,用起来,还是蛮方便的。
我们要做的只是,第一次build_opener的时候,把对应的cookiejar传进去,
以后每次的http的request,都会自动包含了cookie,而不需要我们操心了。