Programing

왜 CURL이 반환되고 오류가 발생합니까? (23) 본문 작성에 실패 했습니까?

crosscheck 2020. 8. 2. 17:24
반응형

왜 CURL이 반환되고 오류가 발생합니까? (23) 본문 작성에 실패 했습니까?


단일 도구로 작동합니다.

curl "someURL"
curl -o - "someURL"

그러나 파이프 라인에서는 작동하지 않습니다.

curl "someURL" | tr -d '\n'
curl -o - "someURL" | tr -d '\n'

다음을 반환합니다.

(23) Failed writing body

컬 출력 배관시 문제점은 무엇입니까? 전체 컬 출력을 버퍼링하고 처리하는 방법?


파이프 프로그램 (예 : grep)이 전체 페이지 쓰기를 마치기 전에 이전 프로그램이 읽기 파이프를 닫을 때 발생합니다.

에서 curl "url" | grep -qs foogrep이 원하는 것을 갖 자마자 curl에서 읽기 스트림을 닫습니다. cURL은이를 예상하지 않으며 "실체 쓰기 실패"오류를 발생시킵니다.

해결 방법은 다음 프로그램으로 보내기 전에 항상 전체 페이지를 읽는 중개 프로그램을 통해 스트림을 파이프하는 것입니다.

예 :

curl "url" | tac | tac | grep -qs foo

tac전체 입력 페이지를 읽고 행 순서를 반대로하는 간단한 Unix 프로그램입니다 (따라서 두 번 실행 함). 마지막 줄을 찾으려면 전체 입력을 읽어야하므로 cURL이 완료 될 때까지 grep에 아무것도 출력하지 않습니다. Grep은 찾고자하는 내용이있을 때 여전히 읽기 스트림을 닫지 만 오류에 영향을 미치지 않는 tac에만 영향을 미칩니다.


(완전성과 향후 검색을 위해) CURL이 버퍼를 관리하는 방식에 따라 버퍼는 -N 옵션을 사용하여 출력 스트림을 비활성화합니다.

예: curl -s -N "URL" | grep -q Welcome


-o(출력 파일) 옵션을 사용하는 경우 대상 디렉토리가 존재하지 않을 수도 있습니다.

예. 당신이있는 경우 -o /tmp/download/abc.txt및 / tmp를 / 다운로드가 존재하지 않습니다.

따라서, 필요한 디렉토리가 생성되도록 / 사전 존재, 사용 --create-dirs옵션을뿐만 아니라 - o필요한 경우


인코딩 문제였습니다. Iconv는 문제를 해결합니다

curl 'http://www.multitran.ru/c/m.exe?CL=1&s=hello&l1=1' | iconv -f windows-1251 | tr -dc '[:print:]' | ...

-o옵션 을 사용하는 대신이 작업을 수행 할 수 있습니다 .

curl [url] > [file]


나는 같은 오류가 있었지만 다른 이유에서 왔습니다. 내 경우에는 1GB 공간의 (tmpfs) 파티션이 있었고 그 파티션의 모든 메모리 를 마침내 채우는 큰 파일을 다운로드하고 있었고 동일한 오류가 발생했습니다.


필자의 경우 서버에 디스크 공간이 부족합니다.

그것을 확인하십시오 df -k .

https://stackoverflow.com/a/28879552/336694tac 에서 설명한 것처럼 두 번의 파이핑을 시도했을 때 디스크 공간이 부족하다는 경고를 받았습니다 . 오류 메시지가 표시되었습니다 write error: No space left on device.


우분투에 니스 캐시를 설치하는 동안이 오류 메시지가 발생했습니다. Google 검색에서 오류가 발생하여 나를 위해 (23) Failed writing body해결책을 게시했습니다.

루트로 명령을 실행하는 동안 버그가 발생했습니다 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 -

저에게는 허가 문제였습니다. Docker 실행은 사용자 프로필로 호출되지만 root는 컨테이너 내부의 사용자입니다. 해결책은 root뿐만 아니라 모든 사용자에게 쓰기 권한이 있기 때문에 curl을 / tmp에 작성하는 것이 었습니다.

-o 옵션을 사용했습니다.

-o / tmp / file_to_download


비슷한 것을 시도 source <( curl -sS $url )하고 (23) Failed writing body오류가 발생하면 프로세스 대체 소스가 작동하지 않기 때문입니다 bash 3.2(macOS의 기본값).

대신이 해결 방법을 사용할 수 있습니다.

source /dev/stdin <<<"$( curl -sS $url )"

참고 URL : https://stackoverflow.com/questions/16703647/why-curl-return-and-error-23-failed-writing-body

반응형