Pythonで基本的なhttp認証スルーソケットを使用してサーバーに接続する方法。プログラムが低レベルのソケットI/O操作を行うため、urllib/urllib2などを使用したくありません。
9068 次
2 に答える
5
おそらく、開始するのに最も簡単な場所は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は複雑になる可能性があります。低レベルのソケットを使用する必要がありますか?
于 2010-05-28T14:50:21.767 に答える
2
たとえば、urllibのソース、具体的にはhttp_error_401
関数(そしてもちろんその周りのディスパッチ)を見てください:HTTPリクエストを作成し、401応答を監視し、そのレルムを抽出し、そのスキームが正しいことを確認し、そのレルムbasic
のユーザーとパスワードで再試行します(retry_http_basic_auth
同じソースファイルのcfr関数)。もちろん多くの作業が必要ですが、それは必要に応じて「ベアメタルまで」プログラミングするための代償です。
于 2010-05-28T14:49:39.963 に答える