gpt4 book ai didi

python - POST 请求正文中删除了换行符? (谷歌应用引擎)

转载 作者:行者123 更新时间:2023-12-05 09:20:17 27 4
gpt4 key购买 nike

我正在 Google App Engine 上构建一个 REST API(不使用端点),允许用户上传 CSV 或制表符分隔的文件并搜索可能的重复项。因为它是一个 API,所以我不能使用 <form> 或 BlobStore 的 upload_url 。我也不能依赖于调用此 API 的单个 Web 客户端。相反,理想情况下,用户将在请求的 body 中发送文件。

我的问题是,当我尝试读取制表符分隔文件的内容时,我发现所有换行符都已被删除,因此无法将内容拆分成行。

如果我直接在 Python 解释器上检查文件的内容,我会看到制表符和换行符在那里(输出在示例中被截断)

>>> with open('./data/occ_sample.txt') as o:
... o.read()
...
'id\ttype\tmodified\tlanguage\trights\n123456\tPhysicalObject\t2015-11-11 11:50:59.0\ten\thttp://creativecommons.org/licenses/by-nc/3.0\n...'

RequestHandler 记录了请求体的内容:

import logging
class ReportApi(webapp2.RequestHandler):
def post(self):
logging.info(self.request.body)
...

所以当我通过dev_appserver调用在curl中运行的API时

curl -X POST -d @data/occ_sample.txt http://localhost:8080/api/v0/report

这显示在日志中:

id  type    modified    language    rights123456    PhysicalObject  2015-11-11 11:50:59.0   en  http://creativecommons.org/licenses/by-nc/3.0

如您所见, header 的最后一个值和第一个记录(分别为 rights123456)之间没有任何内容,每条记录的最后一个值和下一个记录的第一个值也是如此。

我在这里遗漏了什么明显的东西吗?我尝试使用 self.request.bodyself.request.body_fileself.request.POST 加载数据,但似乎都不起作用。我还尝试在请求 header 中应用 Content-Typetext/csvtext/plainapplication/csv ,但没​​有成功。我应该添加不同的 Content-Type 吗?

最佳答案

你用错了curl用于发送您的文件数据的命令行选项,此选项正在去除换行符。

-d选项解析你的数据并发送一个application/x-www-form-urlencoded请求,它去除换行符。来自 curl manpage :

-d, --data <data>

[...]

If you start the data with the letter @, the rest should be a file name to read the data from, or - if you want curl to read the data from stdin. Multiple files can also be specified. Posting data from a file named 'foobar' would thus be done with --data @foobar. When --data is told to read from a file like that, carriage returns and newlines will be stripped out.

大胆强调我的。

使用 --data-binary选项改为:

--data-binary <data>

(HTTP) This posts data exactly as specified with no extra processing whatsoever.

If you start the data with the letter @, the rest should be a filename. Data is posted in a similar manner as --data-ascii does, except that newlines and carriage returns are preserved and conversions are never done.

可能想要包含一个 Content-Type在这种情况下标题;当然,如果您关心该 header ,这取决于您的处理程序。

关于python - POST 请求正文中删除了换行符? (谷歌应用引擎),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38328864/

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