当前位置:  开发笔记 > 编程语言 > 正文

在Python中使用HTTP GET的最快方法是什么?

如何解决《在Python中使用HTTPGET的最快方法是什么?》经验,为你挑选了6个好方法。

如果我知道内容将是一个字符串,那么在Python中使用HTTP GET的最快方法是什么?我正在搜索文档中的快速单行,如:

contents = url.get("http://example.com/foo/bar")

但是,所有我能找到使用谷歌是httpliburllib-我无法找到这些库中的快捷方式.

标准Python 2.5是否具有上述某种形式的快捷方式,还是应该编写函数url_get

    我宁愿不把shell的输出捕获到wgetcurl.

Nick Presta.. 847

Python 2.x:

import urllib.request
contents = urllib.request.urlopen("http://example.com/foo/bar").read()

Python 3.x:

import urllib2
contents = urllib2.urlopen("http://example.com/foo/bar").read()

urllib.request的文档和阅读.

那个怎么样?



1> Nick Presta..:

Python 2.x:

import urllib.request
contents = urllib.request.urlopen("http://example.com/foo/bar").read()

Python 3.x:

import urllib2
contents = urllib2.urlopen("http://example.com/foo/bar").read()

urllib.request的文档和阅读.

那个怎么样?


一切都得到了很好的清理吗?看起来我应该在你的`read`之后调用`close`.这有必要吗?
当urlopen超出范围时,urlopen返回的对象将被删除(并最终确定,并将其关闭).因为Cpython是引用计数的,所以你可以在`read`之后立即依赖它.但是对于Jython等来说,`with`块会更清晰,更安全.
它不适用于仅支持HTTPS的网站.`requests`工作正常
如果您正在使用**Amazon Lambda**并且需要获取URL,那么2.x解决方案可用且内置.它似乎也适用于https.它只不过是`r = urllib2.urlopen("http://blah.com/blah")`然后是`text = r.read()`.它是同步的,只是等待"文本"中的结果.
关闭它是一个好习惯,但是如果你正在寻找一个快速的单行,你可以省略它.:-)
请参阅[我应该在urllib.urlopen()之后调用close()吗?](/sf/ask/17360801/)以获取详细说明.

2> 小智..:

您可以使用名为requests的库.

import requests
r = requests.get("http://example.com/foo/bar")

这很容易.然后你可以这样做:

>>> print(r.status_code)
>>> print(r.headers)
>>> print(r.content)


@lawphotog这可以使用python3,但你必须`pip install requests`.

3> 小智..:

如果你想让httplib2的解决方案成为oneliner考虑实例化匿名Http对象

import httplib2
resp, content = httplib2.Http().request("http://example.com/foo/bar")



4> 小智..:

看看httplib2,它旁边有许多非常有用的功能 - 提供你想要的.

import httplib2

resp, content = httplib2.Http().request("http://example.com/foo/bar")

其中content将是响应主体(作为字符串),resp将包含状态和响应标头.

它不包含在标准的python安装中(但它只需要标准的python),但它绝对值得一试.



5> Xuan..:

theller的wget解决方案非常有用,但是,我发现它并没有打印整个下载过程中的进度.如果在reporthook中的print语句后添加一行,这是完美的.

import sys, urllib

def reporthook(a, b, c):
    print "% 3.1f%% of %d bytes\r" % (min(100, float(a * b) / c * 100), c),
    sys.stdout.flush()
for url in sys.argv[1:]:
    i = url.rfind("/")
    file = url[i+1:]
    print url, "->", file
    urllib.urlretrieve(url, file, reporthook)
print



6> Juniorized..:

足够简单了urllib3

像这样导入它:

import urllib3

pool_manager = urllib3.PoolManager()

并发出这样的请求:

example_request = pool_manager.request("GET", "https://example.com")

print(example_request.data.decode("utf-8")) # Response text.
print(example_request.status) # Status code.
print(example_request.headers["Content-Type"]) # Content type.

您也可以添加标题:

example_request = pool_manager.request("GET", "https://example.com", headers = {
    "Header1": "value1",
    "Header2": "value2"
})

推荐阅读
放ch养奶牛
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有