Запросы — это хорошо, но запросы — лучше.
Я не знаю лучшей и более эффективной библиотеки, которая могла бы быстро и элегантно выполнять HTTP-запросы, чем запросы; эта библиотека является несомненным лидером в этом плане.
Но поскольку асинхронность плохая, можно выполнять асинхронные запросы с помощью потоков или gevent. Написал grequests, тот же автор, который писал запросы.
Только с использованием запросов gevent +.
Не буду долго останавливаться на теме, дам подробную информацию об этой библиотеке.
Запросы — — это асинхронная оболочка над обычными запросами.
Давайте сделаем обычный POST-запрос ко многим URL-адресам:
Все довольно просто, библиотека импортируется, файл открывается на чтение, создается список, переменной params присваиваются значения a:b, c:d. Далее создаем переменную rs, которая будет отвечать за сам POST-запрос, для переменной r создаем grequests.map([rs], size= — асинхронное значение, чем больше значение, тем быстрее будут выполняться http-запросы выполняется, хотя ставить больше 16 нет смысла).import grequests with open("C:\\path\\urls.txt") as werewolves: array = [row.strip() for row in werewolves] params = {'a':'b', 'c':'d'} rs = [grequests.post(u, data=params) for u in array] for r in grequests.imap(rs, size=16) print(r[0].
status_code, r[0].
url)
Теперь, поскольку мы передали все аргументы в переменную r, то есть в grequests.imap(), мы можем взаимодействовать с этой переменной, как и в обычных запросах.
И последний шаг нам нужно отобразить весь код статуса, url адрес, также rs выступает в роли списка, делаем это чтобы не было ошибок индексации по типам: TypeError: 'Response' object does not support indexing
Если вы по-прежнему получаете отслеживание с этой ошибкой, я предлагаю этот вариант: def exception_handlerr(request, exception):
print("Request failed", request.url)
import grequests
with open("C:\\path\\urls.txt") as werewolves:
array = [row.strip() for row in werewolves]
params = {'a':'b', 'c':'d'}
rs = [grequests.post(u, data=params) for u in array]
for r in grequests.map([rs], size=16, exception_handler=exception_handlerr)
print(r[0].
status_code, r[0].
url)
Теперь мы также будем обращаться к переменной r как к списку, чтобы избежать ошибок индексации.
Мы сделали основные шаги.
Вы можете «ДУДОСЕТЬ» сервер.
Хотя заоблачной асинхронности в этой библиотеке нет. Вы можете взглянуть на это Айоhttp .
Еще хотелось бы поговорить об исключениях в grequests. Так как grequests не использует классы ошибок из запросов, а делает это следующим образом: def send(self, **kwargs):
"""
Prepares request based on parameter passed to constructor and optional ``kwargs```.
Then sends request and saves response to :attr:`response`
:returns: ``Response``
"""
merged_kwargs = {}
merged_kwargs.update(self.kwargs)
merged_kwargs.update(kwargs)
try:
self.response = self.session.request(self.method,
self.url, **merged_kwargs)
except Exception as e:
self.exception = e
self.traceback = traceback.format_exc()
return self
Перехватываем с помощьюException_handler: def exception_handlerr(request, exception):
print("Request failed", request.url)
# print(str(exception))
Полный исходный код: def exception_handlerr(request, exception):
print("Request failed", request.url)
import grequests
with open("C:\\path\\urls.txt") as werewolves:
array = [row.strip() for row in werewolves]
params = {'a':'b', 'c':'d'}
rs = [grequests.post(u, data=params) for u in array]
for r in grequests.map([rs], size=16, exception_handler=exception_handlerr)
print(r.status_code, r.url)
Таким образом, мы можем с полной уверенностью обнаруживать ошибки.
С GET-запросами все так же просто, как и с POST-запросами: def exception_handlerr(request, exception):
print("Request failed", request.url)
import grequests
with open("C:\\path\\urls.txt") as werewolves:
array = [row.strip() for row in werewolves]
rs = [grequests.get(u) for u in array]
for r in grequests.map([rs], size=16, exception_handler=exception_handlerr)
print(r.status_code, r.url)
→ исходный код запросов
→ запрашивает документацию
Хорошего дня!
Теги: #python #асинхронные #запросы #python
-
Установка Zte Ax226 На Ubuntu 11.04 И 12.04
19 Oct, 24 -
Плохие И Хорошие Синглтоны
19 Oct, 24 -
Песня Про Hosting.ua Мое Продолжение
19 Oct, 24 -
Загрузчик Для Dspic33
19 Oct, 24