Python通过http发送数据

Python通过http发送数据,python,post,flask,pickle,zlib,Python,Post,Flask,Pickle,Zlib,我有一个由Python构建的API服务器。我需要一组客户端/计算机通过发出http post请求将数据发送到API服务器 这里的数据实际上是html内容。 (注意:我没有将合法数据转换为HTML/XML格式,数据本身就是我从web上收集的HTML),通常每页约200KB。我正试图通过使用串行/串行和压缩来尽可能减轻网络负载 我正在考虑,而不是通过网络发送原始HTML。在服务器端是否有类似序列化html对象(BeautifulSoup?)和反序列化的方法。或者使用某种压缩方法先压缩文件,然后将数据

我有一个由Python构建的API服务器。我需要一组客户端/计算机通过发出http post请求将数据发送到API服务器

这里的数据实际上是html内容。 (注意:我没有将合法数据转换为HTML/XML格式,数据本身就是我从web上收集的HTML),通常每页约200KB。我正试图通过使用串行/串行和压缩来尽可能减轻网络负载

我正在考虑,而不是通过网络发送原始HTML。在服务器端是否有类似序列化html对象(BeautifulSoup?)和反序列化的方法。或者使用某种压缩方法先压缩文件,然后将数据发布到API服务器。在服务器端,一旦接收到压缩的数据,它就可以解压缩数据

我所做的:

(1) 我尝试将原始HTML文本转换为一个soup对象,然后使用Pickle对其进行序列化。然而,它告诉我太多的递归和错误。我还尝试了pickle原始html,压缩性能很差。。。几乎与原始html字符串大小相同

(2) 我试着事先压缩zlib文件,然后它的大小是原始文件的10%。然而,这是解决这个问题的合法方法吗


有什么想法吗?

好吧,我从你们的评论中得到了很多启发,我想出了一个解决方案,使用
zlib
压缩HTML内容并将数据发布到API服务器,在Flask API服务器端,我提取数据并推送到mongodb进行存储

这是一个可以避免未来头痛的部分

客户端:

myinput = "http://www.exmaple.com/001"
myoutput = "<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" ... /html>"
result = {'myinput':myinput, 'myoutput': myoutput}
data = zlib.compress(str(result))
opener.open("www.host.com/senddata", data) 
mongodb的结果:

{ 
"_id" : ObjectId("534e0d346a1b7a0e48ff9076"), 
"myoutput" : "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" ... /html>",  
"myinput" : "http://www.exmaple.com/001" 
}
{
“_id”:ObjectId(“534e0d346a1b7a0e48ff9076”),
“myoutput”:“,
“myinput”:http://www.exmaple.com/001" 
}
(注意:正如您所注意到的,mongo中的最终版本通过在字符前面加斜杠(如双引号)来避开所有合理的字符,但不确定如何将其更改回原来的位置。)

关于在烧瓶中检索二进制数据进行了一些讨论。喜欢 因此,如果直接从
request.stream
读取,就不必弄乱标题


谢谢

取决于你的数据。HTML可能不是最紧凑的格式。也许JSON会对你更好。如果数据看起来像一个表,甚至CSV。无论如何,始终使用压缩(
zlib
将减少数据大小)。既然您在另一端提到了反序列化,我们可以假设您正在构建应用程序的两个方面吗?如果是这样的话,你应该考虑另一种格式——也许JSON已经提到了。@ IvanNevostruev,抱歉混乱,我不是故意把数据发送到HTML格式,原始数据是“HTML”,这意味着网页……我明白了。在这种情况下,您可能会考虑将一些逻辑移动到客户端来解析HTML,并简化它以消除冗余(例如,在JSON中不需要结束标记)。如果您需要HTML原样,那么除了像
zlib
这样的通用压缩算法之外,没有太多选项。感谢您确认
zlib
是一条可行之路。
{ 
"_id" : ObjectId("534e0d346a1b7a0e48ff9076"), 
"myoutput" : "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" ... /html>",  
"myinput" : "http://www.exmaple.com/001" 
}