【问题标题】:Preferred way to make HTTP[S] requests发出 HTTP[S] 请求的首选方式
【发布时间】:2012-10-13 02:59:31
【问题描述】:

我需要使用 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()

我猜这些方法中的一些在底层使用了相同的机制。

还有其他使用httplibhttplib2 的示例。我读到 urllib2 是首选的库。

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

【问题讨论】:

    标签: python http httprequest urllib2 urllib


    【解决方案1】:

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

    【讨论】:

    • 但是您肯定可以访问可以创建文件夹和文件的文件系统吗?使用 Python 的导入机制,您无需通过 easy_install 或 pip 安装包(尽管更好,尤其是在 virtualenv 中),您可以下载请求并将压缩包中的“requests”文件夹放入您的工作目录。导入将起作用并且用法保持不变,除非您的 Python 解释器在另一个目录中启动,否则您需要修改 PYTHONPATH 或 sys.path。如果这不起作用,请解释您为什么(以及如何)受限于标准库。
    • 我的意思是我不会在我的项目中做出这样的决定,我担心我无法证明使用另一个第三方模块是合理的
    • 如果你在请求主页上展示你的原始帖子和代码示例,应该很容易说服你的老板或同事。让他们比较。没有认真的开发人员会更喜欢标准库而不是请求:)
    • 好的,我的组长被说服了。谢谢!
    【解决方案2】:

    同意Fabian,你应该使用Requests

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

    Kenneth Reitz's talk "Python For Humans" -- section on why urllib2 is "the worst API" ever.

    【讨论】:

    • 好吧,从谈话中我得到了部分答案——没有首选的方法——标准库中与 HTTP 相关的所有东西都很丑
    猜你喜欢
    • 2021-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-26
    相关资源
    最近更新 更多