簡體   English   中英

如何檢查代理服務器是否正常工作? (蟒蛇,請求)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM