What is the quickest way to HTTP GET in Python?
如果我知道内容是字符串,那么在python中HTTP获取的最快方法是什么?我正在搜索文档中的一行程序,例如:
1 | contents = url.get("http://example.com/foo/bar") |
但是使用谷歌我能找到的只有
标准的python 2.5是否有上述某种形式的快捷方式,或者我应该编写一个函数
Python 2.x: </P >
1 2 | import urllib2 contents = urllib2.urlopen("http://example.com/foo/bar").read() |
Python 3.x: </P >
1 2 | import urllib.request contents = urllib.request.urlopen("http://example.com/foo/bar").read() |
urllib.request和读文档的方法。 </P >
这是秘密吗? </P >
你可以使用图书馆,被称为(一)的要求。 </P >
1 2 | import requests r = requests.get("http://example.com/foo/bar") |
这是quite逍遥。然后,你可以这样做: </P >
1 2 3 | >>> print(r.status_code) >>> print(r.headers) >>> print(r.content) |
如果你想httplib2溶液与被考虑oneliner匿名HTTP对象实例化 </P >
1 2 | import httplib2 resp, content = httplib2.Http().request("http://example.com/foo/bar") |
有一个看httplib2 -下一个,这对很多非常有用的特征化提供了exactly什么是你想要的。 </P >
1 2 3 | import httplib2 resp, content = httplib2.Http().request("http://example.com/foo/bar") |
内容会在身体的反应(As(字符串),和与会包含的状态和响应头域。 </P >
它不来included和一个标准的Python安装(但它虽然只requires标准Python),但它绝对是值得检查的时间。 </P >
theller的溶液用wget冰真的很有用,但是,在美国能源部的诠释,我找到它了throughout《downloading的进展过程。它的完美,如果你添加一行到售后的reporthook print声明。 </P >
1 2 3 4 5 6 7 8 9 10 11 12 | import sys, urllib def reporthook(a, b, c): print"% 3.1f%% of %d bytes " % (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) |
这里是一个Python脚本的wget命令输入: </P >
1 2 3 4 5 6 7 8 9 10 11 12 | # From python cookbook, 2nd edition, page 487 import sys, urllib def reporthook(a, b, c): print"% 3.1f%% of %d bytes " % (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) |
技术也给header" </P >
Python 3: </P >
1 2 3 4 5 6 | import urllib.request contents = urllib.request.urlopen(urllib.request.Request( "https://api.github.com/repos/cirosantilli/linux-kernel-module-cheat/releases/latest", headers={"Accept" : 'application/vnd.github.full+json"text/html'} )).read() print(contents) |
Python 2: </P >
1 2 3 4 5 6 | import urllib2 contents = urllib2.urlopen(urllib2.Request( "https://api.github.com", headers={"Accept" : 'application/vnd.github.full+json"text/html'} )).read() print(contents) |
没有进一步的价格进口这溶液厂(为我)也与https: </P >
1 2 3 4 5 6 7 | 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() |
在经常有难度的内容时,掠夺specifying A"标注用户代理的"标头信息。然后,usually cancelled的要求是:用像
优秀的解决方案theller轩。 </P >
因为它到工作与Python 3丈夫下面的变化 </P >
1 2 3 4 5 6 7 8 9 10 11 12 | import sys, urllib.request def reporthook(a, b, c): print ("% 3.1f%% of %d bytes " % (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) |
也,你输入的URL应该preceded村的"HTML",否则它剧情A型误差未知的URL。 </P >
它的简单和
进口:它呢 </P >
1 2 3 | import urllib3 pool_manager = urllib3.PoolManager() |
和丈夫这样要求: </P >
1 2 3 4 5 | 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. |
你可以添加:header太 </P >
1 2 3 4 | example_request = pool_manager.request("GET","https://example.com", headers = { "Header1":"value1", "Header2":"value2" }) |
如果你是工作在HTTP API,具体来说,也有更多的选择,是convenient如NAP。 </P >
例如,这里的山羊从技术到GitHub的要点:从2014年1月 </P >
1 2 3 4 5 6 | 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()) |
更多的例子:http:/ / / / github.com kimmobrunfeldt NAP #实例 </P >