作为一个单独的工具,它工作得很好:
curl "someURL"
curl -o - "someURL"
但这在流水线上行不通:
curl "someURL" | tr -d '\n'
curl -o - "someURL" | tr -d '\n'
它返回:
(23) Failed writing body
管道cURL输出的问题是什么?如何缓冲整个cURL输出,然后处理它?
作为一个单独的工具,它工作得很好:
curl "someURL"
curl -o - "someURL"
但这在流水线上行不通:
curl "someURL" | tr -d '\n'
curl -o - "someURL" | tr -d '\n'
它返回:
(23) Failed writing body
管道cURL输出的问题是什么?如何缓冲整个cURL输出,然后处理它?
当前回答
@Kaworu的解释很棒:https://stackoverflow.com/a/28879552/198219
当管道程序(例如grep)在前一个程序完成整个页面的写入之前关闭读管道时,就会发生这种情况。cURL没有预料到这一点,并发出“写入正文失败”错误。
一种解决方法是将流通过中间程序输送,该程序总是在将其提供给下一个程序之前读取整个页面。
我认为更正确的做法是使用海绵,就像@nisetama在评论中建议的那样:
Curl "url" |海绵| grep -qs foo
其他回答
@Kaworu的解释很棒:https://stackoverflow.com/a/28879552/198219
当管道程序(例如grep)在前一个程序完成整个页面的写入之前关闭读管道时,就会发生这种情况。cURL没有预料到这一点,并发出“写入正文失败”错误。
一种解决方法是将流通过中间程序输送,该程序总是在将其提供给下一个程序之前读取整个页面。
我认为更正确的做法是使用海绵,就像@nisetama在评论中建议的那样:
Curl "url" |海绵| grep -qs foo
所以这是编码的问题。Iconv解决了这个问题
curl 'http://www.multitran.ru/c/m.exe?CL=1&s=hello&l1=1' | iconv -f windows-1251 | tr -dc '[:print:]' | ...
我得到这个错误试图使用jq时,我没有安装jq。所以…如果您尝试使用jq,请确保已安装jq。
我在ubuntu上安装清漆缓存时遇到了这个错误信息。谷歌搜索让我在这里的错误(23)失败的写作主体,因此张贴一个解决方案,为我工作。
在以根curl - l https://packagecloud.io/varnishcache/varnish5/gpgkey | apt-key add -的身份运行命令时遇到此错误
解决方案是以非根用户身份运行apt-key add
curl -L https://packagecloud.io/varnishcache/varnish5/gpgkey | apt-key add -
如果你正在尝试类似source <(curl -sS $url)这样的东西,并得到(23)Failed writing body错误,这是因为在bash 3.2 (macOS的默认)中,源进程替换不起作用。
相反,您可以使用这个解决方案。
source /dev/stdin <<<"$( curl -sS $url )"