urllib2 请求提交完整版

  def open_url(self, url, data = None, header = {}, encoding = 'utf-8'):

try:

# 定义请求对象

request = urllib2.Request(url)

request.add_data(data)

for key, val in header.items():

request.add_header(key, val)
# 打开页面获得响应对象

tries = 3

while tries:

try:

response = urllib2.urlopen(request)

break

except Exception, msg:

tries = tries - 1

if tries:

continue

else:

raise MailNetworkError(msg)

# 获得最后打开URL

urlLast = response.geturl()

# 获得响应消息头

headerObject = response.headers

# 获取响应正文

streamData = ""

while True:

subData = response.read(2048)

if subData == "":

break

streamData = streamData + subData

#print headerObject

# 判断返回页面的编码机制

if headerObject.has_key('Content-Encoding'):

if cmp(headerObject['Content-Encoding'].strip().upper(), 'gzip'.upper()) == 0:

compresseddata = streamData

compressedstream = StringIO.StringIO(compresseddata)

gzipper = gzip.GzipFile(fileobj=compressedstream)

htmlCode = gzipper.read()

else:

htmlCode = streamData

else:

# 获取返回页面内容

htmlCode = streamData

# 判断返回页面内容的编码,并将其转化为utf-8编码

if headerObject.has_key('Content-Type'):

contentType = headerObject['Content-Type']

if contentType.lower().find('charset=') != -1:

charset = re.search(r'charset=([^;]*)', contentType.lower()).group(1)

if charset != encoding:

try:

htmlCode = htmlCode.decode(charset).encode(encoding)

except:

pass

response.close()

except Exception, msg:

raise MailNetworkError(msg)

return htmlCode, urlLast


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值