【问题标题】:Python web/server authenticationPython Web/服务器身份验证
【发布时间】:2016-03-03 19:39:59
【问题描述】:

我正在尝试创建一个非常基本的应用程序,该应用程序将能够连接到托管我的大学作业、结果等的网络服务器,并在有新内容时通知我。目前我正在尝试获取请求模块的窍门,但由于服务器使用this 类型的身份验证,我无法登录,并且它给了我错误 401 未经授权。

我尝试搜索如何使用套接字对 Web 服务器进行身份验证,但没有成功。你能帮我看看怎么做吗?

编辑:我使用的是 python 3.4

【问题讨论】:

    标签: python authentication webserver python-requests


    【解决方案1】:

    检查该 URL 响应中的标头后,我认为服务器正在尝试使用 NTLM authentication

    尝试安装requests-ntlm(例如使用pip install requests_ntlm),然后执行以下操作:

    import requests
    from requests_ntlm import HttpNtlmAuth
    
    requests.get('http://moodle.mcast.edu.mt:8085/',
        auth=HttpNtlmAuth('domain\\username', 'password'))
    

    【讨论】:

    • 仍然提示登录表单。没有登录。
    • 我相当肯定这应该可行。您的用户名或密码是否包含任何可能需要特殊编码的字符(现在我们可以查找任何不是字母也不是数字的字符)。
    • 我在几分钟前重试了这次我使用 chrome,它成功地对我进行了身份验证。那么我如何在 python 中做到这一点呢?使用请求连接并提供带有此 http://:@moodle.mcast.edu.mt:8085 签名的主机名?
    • @EvgenyDanilenko,我做了更多的挖掘工作。看起来这个站点实际上使用了 NTLM 身份验证。考虑到这一点,我已经更新了我的答案。
    • 是的,我想知道授权请求中的 NTML 是什么。我正在尝试安装模块。我觉得应该是这样的
    【解决方案2】:

    他们可能不提供用于授权请求的编程 API。如果是这种情况,您可以尝试使用 selenium 手动打开浏览器并为您填写详细信息。 Selenium 显然也可以处理警报框,尽管我自己没有使用过。

    【讨论】:

    • 我查看了您发布的链接,但我认为这行不通,因为它是“按 id 搜索元素”并按 f12 键查看网站信息不共享任何元素除了那个框架。
    • 是的,你是对的;我没有意识到这是一个弹出框类型的东西(我以为它是屏幕截图中的 html 表单)
    【解决方案3】:

    您需要在套接字请求标头中附加一个简单的身份验证标头。

    示例;

    import base64
    
    mySocket.send('GET / HTTP/1.1\r\nAuthorization: Basic %s\r\n\r\n' % base64.b64encode('user:pass'))
    

    Python 3x;

    import base64
    
    template = 'GET / HTTP/1.1\r\nAuthorization: Basic %s\r\n\r\n'
    mySocket.send(bytes(template % base64.b64encode(bytes('user:pass', 'UTF-8')), 'UTF-8'))
    

    【讨论】:

    • 我试过了,但我仍然得到这个错误 TypeError: 'str' does not support the buffer interface。我也将最后一部分更改为 base64.b64encode(bytes('u:p', encoding='utf-8')) 仍然得到那个错误
    • 编辑了初始解决方案并添加了 python 3x 方式,我刚刚在我的工作区上对其进行了测试,它运行良好,没有类型错误。
    • 是的,我还在上面。试图理解 BrokenPipeError: [Errno 32] Broken pipe 是什么意思
    • 当另一端完全关闭连接并且您收到 SIGPIPE 消息时,会引发错误 32 (BrokenPipeError)。 (通常你会用 try-except 忽略它)
    • nvm 那,我忘了连接到服务器。同时在这里处理其他事情。但是我得到了这个错误 b'HTTP/1.1 400 Bad Request\r\nContent-Type: text/html; charset=us-ascii\r\n服务器:Microsoft-HTTPAPI/2.0\r\n'
    猜你喜欢
    • 1970-01-01
    • 2017-01-28
    • 2012-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多