文書化されていませんが、これに使用できるはずですhttplib.HTTPConnection.send()
:
In [13]: httplib.HTTPConnection.send??
Type: instancemethod
String Form:<unbound method HTTPConnection.send>
File: /usr/local/lib/python2.7/httplib.py
Definition: httplib.HTTPConnection.send(self, data)
Source:
def send(self, data):
"""Send `data' to the server."""
if self.sock is None:
if self.auto_open:
self.connect()
else:
raise NotConnected()
if self.debuglevel > 0:
print "send:", repr(data)
blocksize = 8192
if hasattr(data,'read') and not isinstance(data, array):
if self.debuglevel > 0: print "sendIng a read()able"
datablock = data.read(blocksize)
while datablock:
self.sock.sendall(datablock)
datablock = data.read(blocksize)
else:
self.sock.sendall(data)
このrequest()
メソッドは、ヘッダーと本文を結合してこの関数に渡します。この関数は、文字列またはファイル オブジェクトを処理するように見えます。
もちろん、HTTPConnection
オブジェクトを作成できるようにホストを知る必要があるため、コードは次のようになります (テストされていません)。
import httplib
conn = httplib.HTTPConnection('127.0.0.1')
conn.send(open(filename))
response = conn.getresponse()
編集:これがそのまま機能するのを妨げる内部状態の問題があることがわかりました。これは回避策です(Googleメインページの完全な例)が、少しハックです. httplib
Python 2.6 および 2.7 を使用してテストされていますが、3.x では次のように置き換えるだけでは動作しないようhttp.client
です。
import httplib
conn = httplib.HTTPConnection('www.google.com')
conn.send('GET / HTTP/1.1\r\nHost: www.google.com\r\n\r\n')
conn._HTTPConnection__state = httplib._CS_REQ_SENT
response = conn.getresponse()
ここで重要な部分は、呼び出し後conn.__state
に (マングル名) を に設定することです。httplib._CS_REQ_SENT
send()