gpt4 book ai didi

Python 通过 http 发送数据

转载 作者:行者123 更新时间:2023-12-03 17:04:27 24 4
gpt4 key购买 nike

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

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

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

我做了什么:

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

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

有什么想法吗?

最佳答案

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

这是可能会节省一些 future 头痛的部分。

客户端:

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 中的最终版本通过在它们前面放置一个斜杠(例如双引号)以某种方式逃脱了所有合理的字符,不知道如何将其更改回来。)

有一些关于在 flask 中检索二进制数据的讨论。点赞 here .
因此,如果您从 request.stream directly 读取,则不必弄乱标题。 .

谢谢!

关于Python 通过 http 发送数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23097097/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com