【问题标题】:how can i check if the proxy server is working? (python, requests)如何检查代理服务器是否正常工作? (蟒蛇,请求)
【发布时间】:2021-06-08 18:17:07
【问题描述】:

我有一个小问题。我想要一个代理连接。在我的测试脚本中它不起作用。 我从这个网站 [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)

这是输出:

/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 包。

import pythonping

pythonping.ping('47.241.107.35', verbose=True)

输出:

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 % 

谁能解释我做错了什么?

【问题讨论】:

    标签: python proxy python-requests ping


    【解决方案1】:

    我解决了这个问题。我安装了 nmap。使用 nmap 我可以测试代理是否仍在终端上运行。

    nmap -p 8080 52.35.63.184
    

    nmap 告诉我它是 http 还是 https 服务器。 我的问题是,我将“https”键值对放在代理字典中,而服务器是“http”服务器。删除这对后,脚本运行并打印出正确的输出。 代理字典的更正:

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-21
      • 1970-01-01
      • 2023-03-30
      • 2013-04-16
      • 2012-11-23
      • 2016-08-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多