1

我需要使用 POST、GET 和其他方法并指定标头和超时来发出 HTTP 和 HTTPS 请求。

网上有很多例子,各有千秋:

import urllib.parse
import urllib.request

url = 'http://www.someserver.com/cgi-bin/register.cgi'
user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
values = {'name' : 'Michael Foord',
          'location' : 'Northampton',
          'language' : 'Python' }
headers = { 'User-Agent' : user_agent }

data = urllib.parse.urlencode(values)
req = urllib.request.Request(url, data, headers)
response = urllib.request.urlopen(req)
the_page = response.read()

或者

    fetcher = urllib2.build_opener()
    fetcher.addheaders.append(('Cookie', 'aaaa=%s' % aaaa))
    res = fetcher.open(settings.ABC_URL)

或者

req = urllib2.Request(url=url)
req.add_header('X-Real-IP', request.META['REMOTE_ADDR'])
req.add_header('Cookie', request.META['HTTP_COOKIE'])
req.add_header('User-Agent', request.META['HTTP_USER_AGENT'])
resp = urllib2.urlopen(req).read()

或者

handler = urllib.urlopen('http://...')
response = handler.read()

我猜在引擎盖下,其中一些方法使用相同的机制。

还有其他使用httplib,的例子httplib2。我读到 urllib2 是首选的库。

哪一种是首选方法?它们各自有哪些优点和缺点?

4

2 回答 2

6

试试requests模块,它修复了 Python 中的 URL/下载库疯狂问题。

于 2012-10-23T08:11:10.173 回答
2

同意 Fabian,您应该使用Requests

为什么?也许作者自己在这里总结得最好:

Kenneth Reitz 的演讲“Python For Humans”——关于为什么urllib2是“有史以来最糟糕的 API”的部分。

于 2012-10-23T08:26:19.170 回答