2
我從來沒有在Python中看到過這個,我感興趣的是如果有什麼東西可以讓你用寫入接口發送文件(例如HTTP PUT或POST) ?我只見過一個閱讀界面,你通過一個文件名或file
對象(urllib,請求等)用file.write接口上傳文件
當然,我可能從來沒有見過這個很好的理由,我也有興趣知道。
我從來沒有在Python中看到過這個,我感興趣的是如果有什麼東西可以讓你用寫入接口發送文件(例如HTTP PUT或POST) ?我只見過一個閱讀界面,你通過一個文件名或file
對象(urllib,請求等)用file.write接口上傳文件
當然,我可能從來沒有見過這個很好的理由,我也有興趣知道。
雖然它看起來像它會在一個較高的水平是有意義的,讓我們試着將文件映射接口HTTP動詞:
file interface http
------------------------
read GET
HEAD
------------------------
write POST
PUT
PATCH
------------------------
? DELETE
OPTIONS
正如你所看到的,有文件界面之間沒有明確的定位和任何RESTful接口所需的一組HTTP動詞。當然,你可能共同破解一個只使用GET
(讀取)和POST
(寫)的實現,但是這將破壞你需要擴展它來支持任何其他HTTP動詞的第二個實現。
編輯基於評論:
我還沒有嘗試過自己,但似乎在內心深處(HTTP/client.py),如果數據實現read
,將它讀成這樣:
while 1:
datablock = data.read(blocksize)
if not datablock:
break
if encode:
datablock = datablock.encode("iso-8859-1")
self.sock.sendall(datablock)
請注意可能的性能損失在這樣做雖然:
# If msg and message_body are sent in a single send() call,
# it will avoid performance problems caused by the interaction
# between delayed ack and the Nagle algorithm. However,
# there is no performance gain if the message is larger
# than MSS (and there is a memory penalty for the message
# copy).
所以,是的,你應該能夠傳遞一個文件對象作爲data
參數。
我不認爲http動詞很重要。如果有請求發送數據,那麼此時通過從文件讀取來填充網絡緩衝區。我只想通過寫入來填充它。我認爲[c#有一個可寫的流](http://msdn.microsoft.com/en-gb/library/system.net.httpwebrequest.getrequeststream.aspx)的Web請求,我只是想知道是否有可能在python – GP89 2013-03-05 18:39:58
// @ GP89:看編輯 – 2013-03-06 06:40:52
我不明白對不起 - 你是否建議我直接與socket交互發送數據? 'send' /'sendall'與我之後的寫入接口基本相同。 – GP89 2013-03-06 10:39:29