可以用Python向Usenet发布二进制文件吗?

1 投票
1 回答
868 浏览
提问于 2025-04-15 23:38

我正在尝试使用Python自带的nntplib库向Usenet发帖。不过,我搞不清楚怎么用.post方法发布二进制文件。

我可以顺利发布纯文本文件,但就是无法发布二进制文件。有没有什么好主意?

-- 编辑 --

感谢下面Adrian的评论,我在实现目标的路上又迈出了一步。

现在我使用email库来创建一个多部分的消息,并把二进制文件附加到这个消息上。不过,我还是不知道怎么把这个消息直接传给nntplib的post方法。

我必须先写一个临时文件,然后再把它读回来传给nntplib的方法。应该有办法直接在内存中完成这一切……有没有什么建议?

1 个回答

3

你需要对你的帖子进行MIME编码:在NNTP新闻组中,发送一个二进制文件就像发一封带附件的邮件。

这个文件必须用ASCII编码,通常是用base64编码,然后把编码后的文件打包成一个多部分的MIME消息并发送出去……

你可以看看email模块:它实现了你需要的所有功能。

我建议你阅读RFC3977,这是定义NNTP协议的官方标准。

关于你问题的第二部分:

使用StringIO从字符串构建一个假文件对象(nntplib的post()方法接受打开的文件对象)。email.Message对象有一个as_string()方法,可以把消息内容以普通字符串的形式提取出来。

撰写回答