簡體   English   中英

在python中使用套接字的HTTP基本身份驗證

[英]HTTP basic authentication using sockets in python

如何使用python中的基本http auth thru套接字連接到服務器。我不想使用urllib / urllib2等,因為我的程序執行一些低級套接字I / O操作

可能最容易開始的地方是使用makefile()來獲得一個更簡單的類似文件的套接字接口。

import socket, base64

host= 'www.example.com'
path= '/'
username= 'fred'
password= 'bloggs'
token= base64.encodestring('%s:%s' % (username, password)).strip()

lines= [
    'GET %s HTTP/1.1' % path,
    'Host: %s' % host,
    'Authorization: Basic %s' % token,
    'Connection: close',
]

s= socket.socket()
s.connect((host, 80))
f= s.makefile('rwb', bufsize=0)
f.write('\r\n'.join(lines)+'\r\n\r\n')
response= f.read()
f.close()
s.close()

如果您需要解釋返回的響應以選擇HTML或auth-required標頭,並處理重定向,錯誤,傳輸編碼等,那么您將不得不做更多的工作。 HTTP可能很復雜! 您確定需要使用低級插槽嗎?

查看urllib的源代碼 ,特別是http_error_401函數(當然還有調度):發出HTTP請求,查看401響應,提取其領域,檢查其方案是否為basic ,再次嘗試用戶和密碼那個領域(同一個源文件中的cfr函數retry_http_basic_auth )。 當然有很多工作,但這就是你需要的編程“直到裸機”的代價。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM