天天看点

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

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()

1、urllib2.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 urllib
import urllib2
import httplib
import httplib2

print "urllib start\n"
url1 = "http://www.qq.com"
#ff = urllib.urlopen(url, data, proxies, context)
ff = urllib.urlopen(url1)
print ff.headers
print 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 f
print "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 line
conn1.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