如果我知道内容将是一个字符串,那么在Python中使用HTTP GET的最快方法是什么?我正在搜索文档中的快速单行,如:
contents = url.get("http://example.com/foo/bar")
但是,所有我能找到使用谷歌是httplib
和urllib
-我无法找到这些库中的快捷方式.
标准Python 2.5是否具有上述某种形式的快捷方式,还是应该编写函数url_get
?
我宁愿不把shell的输出捕获到wget
或curl
.
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的文档和阅读.
那个怎么样?
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的文档和阅读.
那个怎么样?
您可以使用名为requests的库.
import requests r = requests.get("http://example.com/foo/bar")
这很容易.然后你可以这样做:
>>> print(r.status_code) >>> print(r.headers) >>> print(r.content)
如果你想让httplib2的解决方案成为oneliner考虑实例化匿名Http对象
import httplib2 resp, content = httplib2.Http().request("http://example.com/foo/bar")
看看httplib2,它旁边有许多非常有用的功能 - 提供你想要的.
import httplib2 resp, content = httplib2.Http().request("http://example.com/foo/bar")
其中content将是响应主体(作为字符串),resp将包含状态和响应标头.
它不包含在标准的python安装中(但它只需要标准的python),但它绝对值得一试.
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
足够简单了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" })