gpt4 book ai didi

python - 使用 Python 的 SSL3 POST

转载 作者:太空宇宙 更新时间:2023-11-03 13:42:05 27 4
gpt4 key购买 nike

我有一堆任务要在 cPanel 中自动执行。 http://videos.cpanel.net/cpanel-api-automation/ 中描述了一个 cPanel API但我尝试了我认为对我来说更容易的方法......

  • 基于 skyronic 在 How do I send a HTTP POST value to a (PHP) page using Python? 的回答我试过了

    import urllib, urllib2, ssl
    url = 'https://mysite.com:2083/login'
    user_agent = 'Mozilla/5.0 meridia (Windows NT 5.1; U; en)'
    values = {'name':cpaneluser,
    'pass':cpanelpw}
    headers = {'User-Agent':user_agent}
    data = urllib.urlencode(values)
    req = urllib2.Request(url,data,headers)
    response = urllib2.urlopen(req)
    page = response.read()

    调用urlopen()正在筹集 NameError: global name 'HTTPSConnectionV3' is not defined .

  • 所以然后基于http://bugs.python.org/issue11220我尝试在上面的代码之前加上

    import httplib
    class HTTPSConnectionV3(httplib.HTTPSConnection):
    def __init__(self, *args, **kwargs):
    httplib.HTTPSConnection.__init__(self, *args, **kwargs)

    def connect(self):
    sock = socket.create_connection((self.host, self.port), self.timeout)
    if self._tunnel_host:
    self.sock = sock
    self._tunnel()
    try:
    self.sock = ssl.wrap_socket(sock, self.key_file, self.cert_file, \
    ssl_version=ssl.PROTOCOL_SSLv3)
    except ssl.SSLError, e:
    print("Trying SSLv3.")
    self.sock = ssl.wrap_socket(sock, self.key_file, self.cert_file, \
    ssl_version=ssl.PROTOCOL_SSLv23)

    class HTTPSHandlerV3(urllib2.HTTPSHandler):
    def https_open(self, req):
    return self.do_open(HTTPSConnectionV3, req)

    urllib2.install_opener(urllib2.build_opener(HTTPSHandlerV3()))

    这会打印出“Trying SSLv3”并引发 URLError: <urlopen error [Errno 1] _ssl.c:504: error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol>

  • 最后,这让我找到了 https://github.com/kennethreitz/requests/issues/606其中 gregakespret 说他使用来自 http://bugs.python.org/issue11220 的 Senthil Kuaran 的解决方案解决了类似的问题。 :

    https_sslv3_handler = urllib.request.HTTPSHandler(context=ssl.SSLContext(ssl.PROTOCOL_SSLv3))
    opener = urllib.request.build_opener(https_sslv3_handler)
    urllib.request.install_opener(opener)

    但这引发了 AttributeError: 'module' object has no attribute 'request' .确实help(urllib)不包括任何提及请求,和import urllib.request结果 No module named request .

    我在 Enthought Canopy 发行版中使用 Python 2.7.3。 cPanel 网站使用的是自签名证书,我提到它是因为这是一种不规则行为,会导致常规浏览器出错,尽管我收集到 urllib 和 urllib2 实际上并不验证证书。

    感谢您的阅读,如果您有建议或可以帮助我理解问题,则更是如此。

  • 最佳答案

    我会使用请求库。

    我是 OP,我发布这篇文章已经有一段时间了。我已经使用请求库解决了其他相关任务(POST 以使用 Instructure 的 Canvas API),发现使用 urllib/urllib2 的代码现在更短更甜美。

    刚刚有人点赞了这个问题,让我看到没有人回答过。我的回答对我的 OP 来说并不重要,但这是我建议的方向,自发布以来已经解决了相关问题。

    至于这个问题,我通过在运行 cPanel 的服务器上用 BASH 编写脚本解决了这个问题。这只是确定要调用哪些 cPanel 脚本的问题。但是我没有通过 cPanel Web API 让它运行。

    关于python - 使用 Python 的 SSL3 POST,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17096832/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com