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

如果我知道内容将是一个string,什么是Python中的HTTP GET最快的方法? 我正在寻找一个快速的单行文件,如:

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

但我所能find的所有使用Google的都是httpliburllib – 我无法在这些库中find快捷方式。

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

  1. 我宁愿不要捕获输出到wgetcurl

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 。

例如,以下是从20145月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