python 网络编程httplib/httplib2/urllib/urllib2

来源:互联网 发布:知乎书店推荐 编辑:程序博客网 时间:2024/05/02 10:55

httplib实现了HTTP和HTTPS的客户端协议,一般不直接使用,在python更高层的封装模块中(urllib,urllib2)使用了它的http实现。

http 比URL底层,2是1的加强版。



httplib.HTTPConnection host port strict timeout ]]] )

import httplib
conn 
= httplib.HTTPConnection("baidu.com")
conn.request(
'get''/')
print conn.getresponse().read()
conn.close()

 HTTPConnection类的构造函数,表示一次与服务器之间的交互,即请求/响应。参数host表示服务器主机,如:http://www.csdn.net/;port为端口号,默认值为80; 参数strict的 默认值为false, 表示在无法解析服务器返回的状态行时( status line) (比较典型的状态行如: HTTP/1.0 200 OK ),是否抛BadStatusLine 异常;可选参数timeout 表示超时时间。

HTTPConnection.request method url body headers ]] )

调用request 方法会向服务器发送一次请求,method 表示请求的方法,常用有方法有get 和post ;url 表示请求的资源的url ;body 表示提交到服务器的数据,必须是字符串(如果method 是”post” ,则可以把body 理解为html 表单中的数据);headers 表示请求的http 头。

urllib 和urllib2实现的功能大同小异,但urllib2要比urllib功能等各方面更高一个层次。目前的HTTP访问大部分都使用urllib2.

req = urllib2.Request('http://www.csdn.net')
response 
= urllib2.urlopen(req)
the_page 
= response.read()

1urllib2.Request()的功能是构造一个请求信息,返回的req就是一个构造好的请求

2、urllib2.urlopen()的功能是发送刚刚构造好的请求req,并返回一个文件类的对象response,包括了所有的返回信息。

3通过response.read()可以读取到response里面的html,通过response.info()可以读到一些额外的信息


urllib和urllib2的主要区别:

  1. urllib2可以接受Request对象为URL设置头信息,修改用户代理,设置cookie等, urllib只能接受一个普通的URL.
  2. urllib提供一些比较原始基础的方法而urllib2没有这些, 比如 urlencode

四种方法代码示例,仅供参考:
    
import urllibimport urllib2import httplibimport httplib2print "urllib start\n"url1 = "http://www.qq.com"#ff = urllib.urlopen(url, data, proxies, context)ff = urllib.urlopen(url1)print ff.headersprint ff.info()print "urllib2 start:\n"url = "http://www.csdn.net" # absolute address#urllib2.urlopen(url, data, timeout, cafile, capath, cadefault, context)f   = urllib2.urlopen(url).info()print fprint "another method of urllib2\n"request = urllib2.Request(url)respon  = urllib2.urlopen(request)print respon.info()print "httplib start:\n"conn1 = httplib.HTTPConnection("baidu.com")conn1.request('GET', '/')res = conn1.getresponse()header = res.getheaders()for line in header:    print lineconn1.close()print "httplib2 start:\n"url2 = "http://mail.163.com"http = httplib2.Http()#http.request(uri, method, body, headers, redirections, connection_type)response, content = http.request(url2)print response    







0 0