1- from pathlib import Path
21import logging
2+ from json .decoder import JSONDecodeError
3+ from pathlib import Path
4+
5+ import pandas as pd
36import requests
47from requests .exceptions import ProxyError
5- import pandas as pd
6- from json .decoder import JSONDecodeError
78
89logging .basicConfig (level = logging .INFO )
910
@@ -12,55 +13,66 @@ def add_proxies_to_file(csv_path: str, proxies: list):
1213 '''This function will add one or multiple proxies to the CSV file.'''
1314
1415 if not csv_path .exists ():
15- proxies_file : pd .DataFrame = pd .DataFrame (columns = ['proxy_type' , 'proxy_address' , 'proxy_status' ])
16+ pr_file : pd .DataFrame = pd .DataFrame (
17+ columns = ['proxy_type' , 'proxy_address' , 'proxy_status' ])
1618 logging .info ('New CSV file will be created' )
1719 else :
18- proxies_file : pd .DataFrame = pd .read_csv (csv_path )
20+ pr_file : pd .DataFrame = pd .read_csv (csv_path )
1921 logging .info ('Existing CSV file has been loaded' )
2022
2123 for proxy in proxies :
22- if len (proxies_file ) == 0 :
24+ if len (pr_file ) == 0 :
2325 # First proxy in the file
24- proxies_file = proxies_file .append (proxy , ignore_index = True )
26+ pr_file = pr_file .append (proxy , ignore_index = True )
2527 else :
26- if len (proxies_file .loc [ (proxies_file ['proxy_type' ] == proxy ['proxy_type' ]) & (proxies_file ['proxy_address' ] == proxy ['proxy_address' ])]) > 0 :
28+ if len (pr_file .loc [(pr_file ['proxy_type' ] == proxy ['proxy_type' ]) &
29+ (pr_file ['proxy_address' ] == proxy ['proxy_address' ])]) > 0 :
2730 # Proxy is already in the file
28- proxies_file .loc [ (proxies_file ['proxy_type' ] == proxy ['proxy_type' ]) & (proxies_file ['proxy_address' ] == proxy ['proxy_address' ]) , ['proxy_status' ]] = proxy ['proxy_status' ]
31+ pr_file .loc [(pr_file ['proxy_type' ] == proxy ['proxy_type' ]) &
32+ (pr_file ['proxy_address' ] == proxy ['proxy_address' ]),
33+ ['proxy_status' ]] = proxy ['proxy_status' ]
2934 else :
3035 # Proxy is not yet in the file
31- proxies_file = proxies_file .append (proxy , ignore_index = True )
36+ pr_file = pr_file .append (proxy , ignore_index = True )
3237
33-
34- proxies_file = proxies_file .drop_duplicates ()
35- proxies_file .to_csv (csv_path , index = False )
38+ pr_file = pr_file .drop_duplicates ()
39+ pr_file .to_csv (csv_path , index = False )
3640 logging .info ('CSV file has been written' )
3741
3842
3943def test_proxy (proxy_type : str , proxy_address : str , iptest : str ):
40- '''This function takes a proxy (type, address) and tests it against a given iptest adress.'''
44+ '''This function takes a proxy (type, address)
45+ and tests it against a given iptest adress.'''
4146
4247 logging .info (f'Testing proxy: { proxy_address } ' )
4348
4449 try :
4550 proxies = {proxy_type : proxy_address }
4651 proxy_status : str = ''
47- r = requests .get ('http://iptest.ingokleiber.de' , proxies = proxies )
52+
53+ if proxy_type == 'https' :
54+ r = requests .get (f'https://{ iptest } ' , proxies = proxies )
55+ else :
56+ r = requests .get (f'http://{ iptest } ' , proxies = proxies )
4857
4958 try :
5059 json_response : dict = r .json ()
51-
52- if json_response ["ip" ] == proxy_address :
60+
61+ if json_response ["ip" ] in proxy_address :
5362 proxy_status = 'Proxy functional'
5463 else :
55- logging .warning (f'Proxy "{ proxy_address } " returned { json_response } ' )
64+ logging .warning (f'Proxy "{ proxy_address } "'
65+ f'returned { json_response } ' )
5666 proxy_status = 'Proxy not functional'
5767 except JSONDecodeError :
5868 proxy_status = 'Invalid response'
5969 except ProxyError :
6070 proxy_status = 'Proxy error'
6171
6272 logging .info (f'Proxy { proxy_address } : { proxy_status } ' )
63- return {'proxy_type' : proxy_type , 'proxy_address' : proxy_address , 'proxy_status' : proxy_status }
73+ return {'proxy_type' : proxy_type ,
74+ 'proxy_address' : proxy_address ,
75+ 'proxy_status' : proxy_status }
6476
6577
6678def test_single_proxy (proxy : str , iptest : str , csv_path : str ):
@@ -71,33 +83,37 @@ def test_single_proxy(proxy: str, iptest: str, csv_path: str):
7183 add_proxies_to_file (Path (csv_path ), [result ])
7284
7385
74- def test_file (iptest : str , csv_path : str ):
86+ def test_csv_file (iptest : str , csv_path : str ):
7587 '''This function (re)tests every proxy in a given CSV file.'''
7688
7789 csv_path : Path = Path (csv_path )
7890
7991 if csv_path .exists ():
80- proxies_file : pd .DataFrame = pd .read_csv (csv_path )
92+ pr_file : pd .DataFrame = pd .read_csv (csv_path )
8193 else :
8294 raise FileNotFoundError
8395
8496 proxies : list = []
8597
86- for index , proxy in proxies_file .iterrows ():
87- proxies .append (test_proxy (proxy ['proxy_type' ], proxy ['proxy_address' ], iptest ))
98+ for index , proxy in pr_file .iterrows ():
99+ proxies .append (test_proxy (proxy ['proxy_type' ],
100+ proxy ['proxy_address' ],
101+ iptest ))
88102
89103 add_proxies_to_file (csv_path , proxies )
90104
91105
92106def add_from_text_file (iptest : str , text_path : str , csv_path : str ):
93- ''' This function adds a list of proxies from a text file (line by line).'''
107+ ''' This function adds a list of proxies
108+ from a text file (line by line).'''
94109 text_path : Path = Path (text_path )
95110
96111 if text_path .exists ():
97112 proxies : list = text_path .read_text ().splitlines ()
98113
99114 for proxy in proxies :
100- # We will treat each proxy as a single proxy and leverage the existing function
115+ '''We will treat each proxy as a single proxy
116+ and leverage the existing function'''
101117 test_single_proxy (proxy , iptest , csv_path )
102118 else :
103119 raise FileNotFoundError
0 commit comments