2016-03-03 176 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意味着 –