首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么cURL会返回错误"(23)写入body失败“?

为什么cURL会返回错误"(23)写入body失败“?
EN

Stack Overflow用户
提问于 2013-05-23 08:16:11
回答 11查看 326K关注 0票数 206

它作为一个工具工作得很好:

代码语言:javascript
运行
复制
curl "someURL"
curl -o - "someURL"

但它不能在管道中工作:

代码语言:javascript
运行
复制
curl "someURL" | tr -d '\n'
curl -o - "someURL" | tr -d '\n'

它返回:

代码语言:javascript
运行
复制
(23) Failed writing body

通过管道传输cURL输出有什么问题?如何缓冲整个cURL输出,然后进行处理?

EN

回答 11

Stack Overflow用户

发布于 2015-03-05 21:58:14

当管道程序(例如grep)在前一个程序完成对整个页面的写入之前关闭读取管道时,就会发生这种情况。

curl "url" | grep -qs foo中,一旦grep得到了它想要的东西,它就会关闭从curl读取的流。cURL没有预料到这一点,并发出“写入正文失败”错误。

一种解决方法是通过一个中间程序来传输流,该中间程序总是在将整个页面提供给下一个程序之前读取整个页面。

例如。

代码语言:javascript
运行
复制
curl "url" | tac | tac | grep -qs foo

tac是一个简单的Unix程序,它读取整个输入页面并颠倒行序(因此我们运行它两次)。因为它必须读取整个输入才能找到最后一行,所以在cURL完成之前,它不会向grep输出任何内容。Grep仍然会关闭读取流,但它只会影响tac,tac不会发出错误。

票数 144
EN

Stack Overflow用户

发布于 2016-02-23 21:36:26

对于完整性和将来的搜索:

这是cURL如何管理缓冲区的问题,缓冲区使用-N选项禁用输出流。

示例:curl -s -N "URL" | grep -q Welcome

票数 68
EN

Stack Overflow用户

发布于 2018-01-24 18:46:17

另一种可能是,如果使用-o (输出文件)选项,则目标目录不存在。

例如:如果您有-o /tmp/download/abc.txt,并且/tmp/下载不存在。

因此,请确保预先创建/存在任何所需的目录,如有必要,请使用--create-dirs选项和-o

票数 42
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16703647

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档