2016-03-03 177 views
0

我正在尝试创建一个非常基本的应用程序,它能够连接到托管我的大学作业,结果等的Web服务器,并在有新事物时通知我。目前我正在尝试获取请求模块的挂起信息,但由于服务器使用this类型的身份验证,所以我无法登录,并且它使我发现了401未经授权的错误。Python网络/服务器身份验证

我试着搜索如何验证Web服务器尝试使用套接字,没有运气。你能帮我找出如何做到这一点?

编辑:我使用Python 3.4

回答

2

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

尝试(与pip install requests_ntlm例如)安装requests-ntlm,然后做这个:

import requests 
from requests_ntlm import HttpNtlmAuth 

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

我已经试过了,它与401 –

+0

是否请求'响应http:// @ moodle.mcast.edu.mt:8085'工作? – Chris

+0

仍会提示登录表单。不登录。 –

0

他们可能无法提供与授权请求程序API。如果是这样,您可以尝试使用硒手动打开浏览器并为您填写详细信息。硒显然也处理警报箱,尽管我自己并没有使用它。

+0

我查看了你发布的链接,我认为这不会起作用,因为它是“通过id搜索元素”并按f12查看网站信息不会共享除该框架外的任何元素。 –

+0

是的,你是对的;我没有意识到这是一个弹出框类型的东西(我认为这是一个从截图HTML格式) – DaveBensonPhillips

0

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

示例;

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')) 
+0

我试过,但我仍然得到这个错误TypeError:'str'不支持缓冲区接口。我还将最后一部分更改为base64.b64encode(bytes('u:p',encoding ='utf-8'))仍然出现该错误 –

+0

编辑了初始解决方案并添加了python 3x方式,我刚刚测试过它在我的工作空间,它没有任何类型的错误工作正常。 – L33T

+0

是啊即时通讯仍然在上面。试图了解BrokenPipeError:[Errno 32] Broken Pipe意味着 –