Использование ProxyHandler для отправки запросов

730 просмотра
0
0 Комментариев

def open_website(url, proxies):
    proxy = urllib2.ProxyHandler(proxies)
    opener = urllib2.build_opener(proxy)
    urllib2.install_opener(opener)
 
    while True:
        try:
            urllib2.urlopen(url)
            except Exception as e: print e
            time.sleep(0.4)

Создал функцию, которая в бесконечном цикле посылает запрос на сервер. Перед циклом запустил прокси.

Интересует: будет ли функция urlopen при каждой итерации использовать прокси, или для этого создание ProxyHandler также надо поместить в цикл?


Добавить комментарий

2 Answers

Python Опубликовано 18.12.2018
0

Интересует: будет ли функция urlopen при каждой итерации использовать прокси, или для этого создание ProxyHandler также надо поместить в цикл?

Будет.

Добавить комментарий
0

install_opener() имеет глобальный эффект для всего python-процесса. Внутри функции лучше явно opener.open() использовать вместо urllib2.urlopen() — заодно не будет сомнений, используется ли opener или нет.

Используется ли прокси или нет для urllib2.urlopen() может зависеть от того вызвал ли кто-то в другом потоке install_opener() с другими параметрами. Нельзя сказать, что «Будет», не видя кода для всего приложения.

Также результат может зависеть от протокола (http, https, ftp). Возможен даже такой вариант, что первоначальный запрос идёт через прокси, а последующие запросы, после перенаправления (например, с другим протоколом) могут не использовать прокси.

я не очень силен в питоне, пример прокси в функции нашел на просторах инета. можно как-то кодом вкратце рассказать, как это должно выглядеть?

В случае нескольких потоков, не нужно использовать install_opener() и urllib2.urlopen(). А создать свой opener в каждом потоке:

import time
import urllib2
 
def open_website(url, proxies):
    opener = urllib2.build_opener(urllib2.ProxyHandler(proxies))
 
    while True:
        try:
            opener.open(url).close()
        except Exception as e:
            print(e)
        time.sleep(0.4)

да тут еще существенный нюанс, мне не нужен ответ от сервера, важна только возможность отправлять запрос, в инете я нашел, что с этим мне как раз и поможет urllib2.urlopen()

urlopen() читает только заголовки с сервера и не читает содержимое ответа.

Добавить комментарий
Напишите свой ответ на данный вопрос.
Scroll Up