[英]How to use requests proxy and how to check if a proxy is working with Python requests?
[英]how can i check if the proxy server is working? (python, requests)
我有一個小問題。 我想要一個代理連接。 在我的測試腳本中它不起作用。 我從這個網站 [https://free-proxy-list.net][1] 嘗試了大約 50 個代理,但它們都沒有工作。
import requests
if __name__ == '__main__':
url = 'https://httpbin.org/ip'
proxy = {
"https" : "https://47.241.107.35:8080",
"http" : "http://47.241.107.35:8080"
}
r = requests.get(url, proxies=proxy, timeout=2)
print(r.json(), r.status_code)
這是 output:
/usr/local/bin/python3 "/Volumes/Dominik/Pycharm Projects on MacOS/venv/scripts/test_is_proxy_valid.py"
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/urllib3/connectionpool.py", line 696, in urlopen
self._prepare_proxy(conn)
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/urllib3/connectionpool.py", line 964, in _prepare_proxy
conn.connect()
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/urllib3/connection.py", line 359, in connect
conn = self._connect_tls_proxy(hostname, conn)
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/urllib3/connection.py", line 496, in _connect_tls_proxy
return ssl_wrap_socket(
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/urllib3/util/ssl_.py", line 432, in ssl_wrap_socket
ssl_sock = _ssl_wrap_socket_impl(sock, context, tls_in_tls)
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/urllib3/util/ssl_.py", line 474, in _ssl_wrap_socket_impl
return ssl_context.wrap_socket(sock)
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/ssl.py", line 500, in wrap_socket
return self.sslsocket_class._create(
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/ssl.py", line 1040, in _create
self.do_handshake()
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/ssl.py", line 1309, in do_handshake
self._sslobj.do_handshake()
ssl.SSLError: [SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:1123)
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/requests/adapters.py", line 439, in send
resp = conn.urlopen(
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/urllib3/connectionpool.py", line 755, in urlopen
retries = retries.increment(
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/urllib3/util/retry.py", line 573, in increment
raise MaxRetryError(_pool, url, error or ResponseError(cause))
urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='httpbin.org', port=443): Max retries exceeded with url: /ip (Caused by SSLError(SSLError(1, '[SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:1123)')))
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/Volumes/Dominik/Pycharm Projects on MacOS/venv/scripts/test_is_proxy_valid.py", line 13, in <module>
r = requests.get(url, proxies=proxy, timeout=2)
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/requests/api.py", line 76, in get
return request('get', url, params=params, **kwargs)
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/requests/api.py", line 61, in request
return session.request(method=method, url=url, **kwargs)
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/requests/sessions.py", line 542, in request
resp = self.send(prep, **send_kwargs)
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/requests/sessions.py", line 655, in send
r = adapter.send(request, **kwargs)
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/requests/adapters.py", line 514, in send
raise SSLError(e, request=request)
requests.exceptions.SSLError: HTTPSConnectionPool(host='httpbin.org', port=443): Max retries exceeded with url: /ip (Caused by SSLError(SSLError(1, '[SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:1123)')))
Process finished with exit code 1
我還嘗試檢查代理是否正在使用pythonping package。
import pythonping
pythonping.ping('47.241.107.35', verbose=True)
Output:
dominik@MBP-von-Dominik scripts % sudo python3 test_pythonping.py
Reply from 47.241.107.35, 9 bytes in 272.06ms
Reply from 47.241.107.35, 9 bytes in 306.51ms
Reply from 47.241.107.35, 9 bytes in 305.31ms
Reply from 47.241.107.35, 9 bytes in 307.49ms
dominik@MBP-von-Dominik scripts %
誰能解釋我做錯了什么?
我解決了這個問題。 我安裝了nmap 。 使用 nmap 我可以測試代理是否仍在終端上運行。
nmap -p 8080 52.35.63.184
nmap 告訴我它是 http 還是 https 服務器。 我的問題是,我將“https”鍵值對放在代理字典中,而服務器是“http”服務器。 刪除這對后,腳本運行並打印出正確的 output。 代理字典的更正:
proxy = {
"http" : "http://52.35.63.184:8080"
}
輸出(我使用了不同的代理,它也不適用於舊腳本版本):
InsecureRequestWarning: Unverified HTTPS request is being made to host 'httpbin.org'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings
warnings.warn(
{'origin': '188.195.149.36'} 200
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.