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

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

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

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

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

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

8 Solutions collect form web for “Каков самый быстрый способ HTTP GET в Python?”

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 было oneliner, рассмотрите возможность установки анонимного объекта Http

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

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

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

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

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

Решение theller для wget действительно полезно, однако я обнаружил, что он не распечатывает прогресс на протяжении всего процесса загрузки. Это идеальный вариант, если вы добавите одну строку после утверждения печати в 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 

Вот сценарий 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 

Отличные решения Xuan, 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 

Кроме того, URL, который вы вводите, должен предшествовать «http: //», иначе он возвращает неизвестную ошибку типа URL-адреса.

Если вы работаете с 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

  • Корневой модуль Tor (python), но не разгружает конфигурацию
  • Простой сервер python с использованием SimpleHTTPServer и SocketServer, как мне закрыть сокет до перезапуска файла .py?
  • Python QT QNetworkRequest завершает работу с "(процесс: 3265): GLib-ERROR **: Создание каналов для GWakeup: Слишком много открытых файлов"
  • Неустойчивая производительность сети python со временем ухудшается?
  • Python Library / Framework для написания приложений P2P
  • Связывание моего компьютера с Windows с Wi-Fi AP с Python
  • Установить порт в запросах
  • Монитор сетевого трафика с pcapy в python
  • Python - лучший язык программирования в мире.