Pyll urllib (с настройкой прокси) возвращает неправильный код, совет, пожалуйста? - PullRequest
0 голосов
/ 29 апреля 2019

Используя urllib, я проверяю список URL, где моя машина расположена за веб-прокси-сервером squid, но почему-то я не могу правильно управлять настройкой прокси в запросах, которые я получаю 404 вместо 200 при вызове функции в for цикл или с помощью функции карты.

однако отдельные запросы работают нормально!

from multiprocessing import Pool
import urllib.error
import urllib.request

proxy_host = "192.168.1.1:3128"

urls = ['https://www.youtube.com/watch?v=XqZsoesa55w', 
        'https://www.youtube.com/watch?v=GR2o6k8aPlI', 
        'https://stackoverflow.com/']

Пример одного запроса (работает нормально):

req = urllib.request.Request(
    url = url[0], 
    data = None, 
    headers = {
        'User-Agent': 'Mozilla/5.0'
    })
req.set_proxy(proxy_host, 'http')
conn = urllib.request.urlopen(req)

conn.getcode() # --> returns 200

Возвращает истинный http-код для проверки одного URL.

Пример пакетного запроса (возвращает неверный код статуса http):

Функция:

def check_url(url):
    req = urllib.request.Request(
        url = url, 
        data = None, 
        headers = {
            'User-Agent': 'Mozilla/5.0'
        })
    req.set_proxy(proxy_host, 'http')
    try:
        conn = urllib.request.urlopen(req)
    except urllib.error.HTTPError as e:
        return  [str(e), url]
    except urllib.error.URLError as e:
        return  [str(e), url]
    except ValueError as e:
        return  [str(e), url]
    else:
        if conn:
            return conn.getcode()
        else:
            return 'Unknown Status!'

for url in urls:
    check_url(url)

# returns: 
>>>404
>>>404
>>>404


p = Pool(processes=20)
p.map(check_url,urls)
#returns: 
>>>[404, 404, 404]
...