Я программирую веб-браузер с кукловодом в nodejs, но, к сожалению, мне нужны прокси-серверы, поэтому я попытался разработать прокси-контролер с python.
, он работает нормально и дает мне 20% Мертвые прокси это означает, что 80% моих прокси работают, но я хочу уверенный результат, а не что-то приблизительное
Я использую urllib3, а также модуль потока, чтобы использовать многопоточность на моем контролере (и я Я пытался отключить его, чтобы увидеть, если это проблема). Я также пытался сделать тот же скрипт с модулем запроса, но у него тоже странный компромисс. И я пытался использовать скрипт, который использует urllib, а не urllib3, он тоже не работает ...
Я знаю, что эти прокси не работают, потому что я использовал другие прокси-контролеры, такие как elite proxy switcher и fogldn proxy проверки и онлайн-проверки, и все они имеют одинаковый результат, прокси, которые означают, что мой скрипт явно не работает.
Вы спросите меня, почему я не использую эти прокси-контролеры, во-первых, потому что я хочу узнать и, во-вторых, потому что я хочу отправить его своему процессу с помощью API и метода get, было бы неплохо изучить python веб-сервер.
Я хотел удалить те плохие прокси, которые извлечены из мой список, поэтому я добавил условия в свой код, чтобы убедиться, что прокси работают, поэтому я проверяю 3 вещи из моего прокси:
Закончился ли запрос без ошибки
сделать код ответа http 200 (что означает, что запрос в порядке)
я также использую 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()