5

Pythonで基本的なhttp認証スルーソケットを使用してサーバーに接続する方法。プログラムが低レベルのソケットI/O操作を行うため、urllib/urllib2などを使用したくありません。

4

2 に答える 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 に答える