什么是Python中的HTTP GET最快的方法?
如果我知道内容将是一个string,什么是Python中的HTTP GET最快的方法? 我正在寻找一个快速的单行文件,如:
contents = url.get("http://example.com/foo/bar")
但我所能find的所有使用Google的都是httplib
和urllib
– 我无法在这些库中find快捷方式。
标准Python 2.5是否具有上述某种forms的快捷方式,还是应该编写一个函数url_get
?
- 我宁愿不要捕获输出到
wget
或curl
。
Python 2.x:
import urllib2 urllib2.urlopen("http://example.com/foo/bar").read()
Python 3.x:
import urllib.request urllib.request.urlopen("http://example.com/foo/bar").read()
urllib.request的文档和读取 。
那个怎么样?
你可以使用一个叫做请求的库。
import requests r = requests.get("http://example.com/foo/bar")
这很容易。 那么你可以这样做:
>>> print r.status_code >>> print r.headers >>> print r.content
如果你想用httplib2的解决scheme来考虑匿名Http对象的instatntinating
import httplib2 resp, content = httplib2.Http().request("http://example.com/foo/bar")
看看httplib2 ,它旁边有很多非常有用的function,它提供了你想要的东西。
import httplib2 resp, content = httplib2.Http().request("http://example.com/foo/bar")
哪里内容将是响应主体(作为一个string),并且resp将包含状态和响应标头。
它不包含在标准的Python安装(但它只需要标准的Python),但它绝对值得一试。
对于wget,theller的解决scheme是非常有用的,但是,我发现它不会在整个下载过程中打印出进度。 在reporthook中打印语句之后添加一行是完美的。
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
这里是Python中的wget脚本:
# From python cookbook, 2nd edition, page 487 import sys, urllib def reporthook(a, b, c): print "% 3.1f%% of %d bytes\r" % (min(100, float(a * b) / c * 100), c), for url in sys.argv[1:]: i = url.rfind("/") file = url[i+1:] print url, "->", file urllib.urlretrieve(url, file, reporthook) print
优秀的解决schemeXuan,Theller。
为了使它与python 3进行以下更改
import sys, urllib.request 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.request.urlretrieve(url, file, reporthook) print
另外,你input的URL应该以“http://”开头,否则返回一个未知的urltypes错误。
如果您正在使用HTTP API,还有更方便的select,例如Nap 。
例如,以下是从2014年5月1日起如何从Github获得要点:
from nap.url import Url api = Url('https://api.github.com') gists = api.join('gists') response = gists.get(params={'since': '2014-05-01T00:00:00Z'}) print(response.json())
更多例子: https : //github.com/kimmobrunfeldt/nap#examples