Python проверка прокси с urllib3, которые дают странные результаты - PullRequest
0 голосов
/ 17 апреля 2020

Я программирую веб-браузер с кукловодом в nodejs, но, к сожалению, мне нужны прокси-серверы, поэтому я попытался разработать прокси-контролер с python.

, он работает нормально и дает мне 20% Мертвые прокси это означает, что 80% моих прокси работают, но я хочу уверенный результат, а не что-то приблизительное

Я использую urllib3, а также модуль потока, чтобы использовать многопоточность на моем контролере (и я Я пытался отключить его, чтобы увидеть, если это проблема). Я также пытался сделать тот же скрипт с модулем запроса, но у него тоже странный компромисс. И я пытался использовать скрипт, который использует urllib, а не urllib3, он тоже не работает ...

Я знаю, что эти прокси не работают, потому что я использовал другие прокси-контролеры, такие как elite proxy switcher и fogldn proxy проверки и онлайн-проверки, и все они имеют одинаковый результат, прокси, которые означают, что мой скрипт явно не работает.

Вы спросите меня, почему я не использую эти прокси-контролеры, во-первых, потому что я хочу узнать и, во-вторых, потому что я хочу отправить его своему процессу с помощью API и метода get, было бы неплохо изучить python веб-сервер.

Я хотел удалить те плохие прокси, которые извлечены из мой список, поэтому я добавил условия в свой код, чтобы убедиться, что прокси работают, поэтому я проверяю 3 вещи из моего прокси:

  1. Закончился ли запрос без ошибки

  2. сделать код ответа http 200 (что означает, что запрос в порядке)

  3. я также использую ipify api для проверки моего ip, так что я могу сравнить IP, возвращенный API и IP прокси. Поэтому, если ip прокси - это ip, возвращенный из ipify

Я использовал все эти условия, чтобы убедиться, что мои прокси верны, и даже если у меня 3 условия, мой скрипт продолжится вернуть мне прокси, которые не работают. Поэтому я прошу вашей помощи, чтобы решить эту действительно странную проблему.

Спасибо и извините за неудобства

Вот мой код:


import urllib3
import requests
import threading

def chomp(x):
    if x.endswith("\r\n"):
        return x[:-2]
    if x.endswith("\n") or x.endswith("\r"):
        return x[:-1]
    return x




def is_proxy_working(pip):
    proxyparsed = "https://" + chomp(pip)
    proxy = urllib3.ProxyManager(proxyparsed,timeout=3.0)
    try:
       r = proxy.request('GET', 'https://api.ipify.org/')
    except Exception:
        return False

    if r.status == 200 and r.data.decode("utf-8") == pip.split(':')[0] :
        return True

    else : 
        return False


def scrap_and_check():
    r = requests.get('https://api.proxyscrape.com/?request=displayproxies&proxytype=http&timeout=2000&country=all&ssl=yes&anonymity=all')
    for currentProxy in r.text.split('\n'):
        if is_proxy_working(currentProxy):
            print(currentProxy)





threads = 4 
process = []

for i in range(0, threads):
    thread = threading.Thread(target=scrap_and_check())
    process.append(thread)

for p in process:
    p.start()

for p in process:
    p.join()

...