python调用web请求

使用脚本程序发送GET或POST,这是最简单也是最常见最频繁的事情之一;那为什么我还要YY一遍呢? 因为不只是熟能生巧,熟还能生出好多东西来呢,就看是和谁生!

我想有必要再次温习一遍HTTP协议及GET/POST请求相应内容与格式等基础知识的;不过我不会在此简述,希望你去看看那些诸如“当你使用浏览器打开一个URL,究竟发生了哪些事”这样的文章吧!

python发送GET/POST可能涉及的lib: urllib, urllib2, cookielib ;至于其他的诸如处理HTML等不在本话题范围内:)

>>> import urllib2   
>>> print urllib2.urlopen('http://google.com').read()  

>>> import urllib2
>>> print urllib2.urlopen('http://google.com').read()

以上是hello world级别了;但geek程序员往往会通过此发现,打印出的东西,因URL而异 --- 废话,当然不是说内容,是指风格!!! 优秀的站点,其源码往往也在各个方面高一个水准,包括unicode编码、安全、性能等等方面。

>>> import urllib   
>>> import urllib2   
>>> import cookielib   
  
>>> cj = cookielib.CookieJar()   
>>> opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))   
>>> opener.addheaders = [('User-agent','Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)')]   
>>> urllib2.install_opener(opener)   
>>> req = urllib2.Request("http://xxoo.com",urllib.urlencode({"username":"root","password":"ROOTXXOO"}))   
  
>>> resp = urllib2.urlopen(req)   
>>> print resp.read()  
>>> import urllib
>>> import urllib2
>>> import cookielib

>>> cj = cookielib.CookieJar()
>>> opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
>>> opener.addheaders = [('User-agent','Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)')]
>>> urllib2.install_opener(opener)
>>> req = urllib2.Request("http://xxoo.com",urllib.urlencode({"username":"root","password":"ROOTXXOO"}))

>>> resp = urllib2.urlopen(req)
>>> print resp.read()

A 是否因为cookie的问题而POST失败,最好使用真的浏览器登录,然后使用firebug这样的调试工具来查看实际的请求与响应头信息,以及cookie数据!

B 除了cookie之外,还有很多其他方法来达到一些安全或其他目的;cookie能保存的数据就4k,而且对客户端完全开放。

C 其实第一件重要的事情是阅读源码,肉眼解析出form及其action和参数等;搞清楚逻辑,再去模拟;但这一步往往是最开始的斗智斗勇阶段;有些程序员总是使用小把戏来调戏你,比如追加无意义参数,追加随机数并命名为看上去像业务数据的变量等,还有人喜欢玩数学,比如搞质数运算等。

D 验证码问题:分很多种,有的程序员比较嫩,所以你可以分析下绕过;而一般的安全验证码,则需要你自己多请求一些验证码回来建库,做特征识别;至于很变态的验证码,建议你放弃这个思路,不要非去识别不可!

E 网上流传的discuz!模拟登录,其实都大多是理论;真正的程序都在那些专业发帖公司那里。