2013-03-05 20 views
2

我從來沒有在Python中看到過這個,我感興趣的是如果有什麼東西可以讓你用寫入接口發送文件(例如HTTP PUT或POST) ?我只見過一個閱讀界面,你通過一個文件名或file對象(urllib,請求等)用file.write接口上傳文件

當然,我可能從來沒有見過這個很好的理由,我也有興趣知道。

回答

-1

雖然它看起來像它會在一個較高的水平是有意義的,讓我們試着將文件映射接口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參數。

+0

我不認爲http動詞很重要。如果有請求發送數據,那麼此時通過從文件讀取來填充網絡緩衝區。我只想通過寫入來填充它。我認爲[c#有一個可寫的流](http://msdn.microsoft.com/en-gb/library/system.net.httpwebrequest.getrequeststream.aspx)的Web請求,我只是想知道是否有可能在python – GP89 2013-03-05 18:39:58

+0

// @ GP89:看編輯 – 2013-03-06 06:40:52

+0

我不明白對不起 - 你是否建議我直接與socket交互發送數據? 'send' /'sendall'與我之後的寫入接口基本相同。 – GP89 2013-03-06 10:39:29