我有一个由Python flask构建的API服务器。我需要一组客户端/计算机,以通过发出http发布请求将数据发送到API服务器。
这里的数据实际上是html内容。(注意:我不是将合法数据转换为HTML / XML格式,数据本身就是我从网络上收集的HTML),通常每页大约200KB。而且我正在尝试通过使用串行/串行和压缩来最大程度地减轻网络负载。
我正在考虑,而不是通过网络发送原始HTML。有没有什么方法可以像将html对象序列化(BeautifulSoup汤?)并在服务器端反序列化。或使用某种压缩方法先压缩文件,然后将数据发布到API服务器。在服务器端,一旦接收到压缩后的数据,它就可以解压缩数据。
我做了什么:
(1)我尝试将原始HTML文本转换为汤对象,然后使用Pickle对其进行序列化。但是,它告诉我太多的递归并出错了。我还尝试过腌制原始html,压缩性能很差……大小几乎与原始html字符串相同。
(2)我尝试使用zlib预先压缩文件,然后将其压缩为原始文件的10%。但是,这是解决此问题的合法方法吗?
有什么想法吗?
好吧,我从你们的评论中得到了很多启发,我想出了一个解决方案,该解决方案使用压缩HTML内容zlib
并将数据发布到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)
服务器端:
@app.route('/contribute', methods=['POST'])
def contribute():
try:
data = request.stream.read()
result = eval(zlib.decompress(data))
db.result.insert(result)
except:
print sys.exc_info()
pass
return 'OK'
结果在mongodb中:
{
"_id" : ObjectId("534e0d346a1b7a0e48ff9076"),
"myoutput" : "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" ... /html>",
"myinput" : "http://www.exmaple.com/001"
}
(注意:您已经注意到,mongo的最终版本以某种方式通过在它们前面加一个斜杠来逃避了所有明智的字符,例如双引号,但不确定如何将其改回。)
关于在烧瓶中检索二进制数据有一些讨论。喜欢这里。因此,如果您从阅读,则不必弄乱标题request.stream directly
。
谢谢!
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句