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

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

但所有我能找到使用谷歌是httplib和urllib -我无法在这些库中找到一个快捷方式。

标准的Python 2.5是否有类似上述的某种形式的快捷方式,或者我应该写一个url_get函数?

我宁愿不捕获对wget或curl进行换壳的输出。


当前回答

看看httplib2,除了许多非常有用的特性之外,它还提供了您想要的东西。

import httplib2

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

其中内容将是响应体(作为字符串),而resp将包含状态和响应标头。

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

其他回答

实际上在Python中,我们可以像从文件一样读取HTTP响应,这里有一个从API读取JSON的例子。

import json
from urllib.request import urlopen

with urlopen(url) as f:
    resp = json.load(f)

return resp['some_key']

Python 3:

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

Python 2:

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

urllib的文档。请求并阅读。

使用强大的urllib3库就足够简单了。

像这样导入:

import urllib3

http = urllib3.PoolManager()

然后提出这样的请求:

response = http.request('GET', 'https://example.com')

print(response.data) # Raw data.
print(response.data.decode('utf-8')) # Text.
print(response.status) # Status code.
print(response.headers['Content-Type']) # Content type.

你也可以添加标题:

response = http.request('GET', 'https://example.com', headers={
    'key1': 'value1',
    'key2': 'value2'
})

更多信息可以在urllib3文档中找到。

Urllib3比内置的urllib更安全,更容易使用。请求或HTTP模块,是稳定的。

看看httplib2,除了许多非常有用的特性之外,它还提供了您想要的东西。

import httplib2

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

其中内容将是响应体(作为字符串),而resp将包含状态和响应标头。

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

没有进一步的必要导入,这个解决方案工作(对我来说)-也与https:

try:
    import urllib2 as urlreq # Python 2.x
except:
    import urllib.request as urlreq # Python 3.x
req = urlreq.Request("http://example.com/foo/bar")
req.add_header('User-Agent', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36')
urlreq.urlopen(req).read()

当没有在头信息中指定“User-Agent”时,我经常很难获取内容。然后通常用类似urllib2的代码取消请求。HTTP错误403:禁止或urllib.error.HTTPError: HTTP错误403:禁止。