Каков самый быстрый способ HTTP GET в Python?



3 Answers

Вы можете использовать библиотеку, называемую requests .

import requests
r = requests.get("http://example.com/foo/bar")

Это довольно легко. Тогда вы можете сделать вот так:

>>> print r.status_code
>>> print r.headers
>>> print r.content
Question

Каков самый быстрый способ HTTP GET в Python, если я знаю, что контент будет строкой? Я ищу документы для быстрого однострочного изображения:

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

Но все, что я могу найти с помощью Google, это httplib и urllib - и я не могу найти ярлык в этих библиотеках.

Имеет ли стандартный Python 2.5 ярлык в той или иной форме, как указано выше, или мне нужно написать функцию url_get ?

  1. Я бы предпочел не записывать результаты обхода в wget или curl .



Вот сценарий wget в Python:

# 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



Если вы работаете с API HTTP специально, есть также более удобные варианты, такие как Nap .

Например, вот как получить gists от Github с 1 мая 2014 года :

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




Посмотрите на httplib2 , который - рядом с множеством очень полезных функций - обеспечивает именно то, что вы хотите.

import httplib2

resp, content = httplib2.Http().request("http://example.com/foo/bar")

Где контент будет органом ответа (как строка), а resp будет содержать заголовки состояния и ответа.

Он не входит в стандартную установку python (но для этого требуется только стандартный python), но это определенно стоит проверить.




Related