是否可以使用 Python 将二进制文件发布到 usenet?
我正在尝试使用 python 附带的 nntplib 向 usenet 发布一些帖子。但是我不知道如何使用 .post 方法发布二进制文件。
我可以很好地发布纯文本文件,但不能发布二进制文件。有什么想法吗?
-- 编辑--
感谢下面阿德里安的评论,我已经朝着我的目标迈出了一步。
我现在使用电子邮件库来制作多部分消息并将二进制文件附加到消息中。但是我似乎无法弄清楚如何将该消息直接传递给 nttplib post 方法。
我必须首先写入一个临时文件,然后将其读回到 nttplib 方法中。必须有一种方法可以在内存中完成这一切......有什么建议吗?
I'm trying to use the nntplib that comes with python to make some posts to usenet. However I can't figure out how to post binary files using the .post method.
I can post plain text files just fine, but not binary files. any ideas?
-- EDIT--
So thanks to Adrian's comment below I've managed to make one step towards my goal.
I now use the email library to make a multipart message and attach the binary files to the message. However I can't seem to figure out how to pass that message directly to the nttplib post method.
I have to first write a temporary file, then read it back in to the nttplib method. There has to be a way to do this all in memory....any suggestions?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
你必须对你的帖子进行 MIME 编码:NNTP 新闻组中的二进制帖子就像带有附件的邮件。
该文件必须以 ASCII 进行编码,通常使用
base64
编码,然后将编码后的文件打包到多部分 MIME 消息中并发布...看看
email
模块:它实现了您想要的所有功能。我鼓励您阅读
RFC3977
这是官方标准定义 NNTP 协议。对于问题的第二部分:
使用
StringIO
从字符串构建一个假文件对象(nntplib 的post()
方法接受打开的文件对象)。email.Message
对象有一个as_string()
方法来检索纯字符串形式的消息内容。you have to MIME-encode your post: a binary post in an NNTP newsgroup is like a mail with an attachment.
the file has to be encoded in ASCII, generally using the
base64
encoding, then the encoded file is packaged iton a multipart MIME message and posted...have a look at the
email
module: it implements all that you want.i encourage you to read
RFC3977
which is the official standard defining the NNTP protocol.for the second part of your question:
use
StringIO
to build a fake file object from a string (thepost()
method of nntplib accepts open file objects).email.Message
objects have aas_string()
method to retrieve the content of the message as a plain string.