在Python中,最快的HTTP get方法是什么?

What is the quickest way to HTTP GET in Python?

如果我知道内容是字符串,那么在python中HTTP获取的最快方法是什么?我正在搜索文档中的一行程序,例如:

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

但是使用谷歌我能找到的只有httpliburllib,而且我在这些库中找不到捷径。

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

  • 我不想把炮击的结果记录在wgetcurl上。

  • 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)
    print

    这里是一个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)
    print


    技术也给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的要求是:用像urllib2.HTTPError: HTTP Error 403: Forbiddenurllib.error.HTTPError: HTTP Error 403: Forbidden。 </P >


    优秀的解决方案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)
    print

    也,你输入的URL应该preceded村的"HTML",否则它剧情A型误差未知的URL。 </P >


    它的简单和urllib3已经受够了。 </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 >