使用Python上传Basecamp文件

时间:2011-09-06 10:41:41

标签: python basecamp

根据Basecamp API文档,文件应使用HTTP POST上传,内容类型设置为application / octet-stream,请求正文包含文件的二进制内容(请参阅http://developer.37signals.com/basecamp/)。我想流式传输文件,而不是将整个内容读入内存。我正在使用Python 2.7。

我可以看到一些可能性:

  • 使用低级套接字API执行此操作。
  • 使用urllib2和Poster(http://atlee.ca/software/poster/)来处理文件流。但是,使用Poster,您可以为文件流注册特殊的开启工具,我已经明确地使用自己的开启工具(将其传递给build_opener)来处理Basecamp服务器上的身份验证。另外,海报文档只讨论发布表单数据,我还不清楚(仍在阅读源代码)它是否可以处理八位字节流。
  • 使用httplib。这看起来会让我对POST数据进行更多的低级处理(所以我可以使用八位字节流),但我仍然看不到一种简单的方法来传输文件。

我发现Python: HTTP Post a large file with streaming但听起来除非我想使用表单数据格式,否则我必须修补httplib(!)。那个帖子已经有一年了,所以我希望现在有更好的方法。

现在我正在调查像海报一样创建我自己的混音,但想知道:这真的很难吗?难道没有一种更简单的方法来处理我认为比较标准的用例吗?

1 个答案:

答案 0 :(得分:0)

我最终使用Twisted,因为我需要上传异步发生。这篇优秀的博客文章解释了一般程序:http://marianoiglesias.com.ar/python/file-uploading-with-multi-part-encoding-using-twisted/。我只是编写自己的生成器而不是将原始二进制数据写为POST有效负载。