왜 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 foo
grep이 원하는 것을 갖 자마자 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
'Programing' 카테고리의 다른 글
javax.transaction.Transactional 및 org.springframework.transaction.annotation.Transactional (0) | 2020.08.02 |
---|---|
C # 3.0 개체 이니셜 라이저 생성자 괄호가 선택적인 이유는 무엇입니까? (0) | 2020.08.02 |
무한 재귀없이 '=='연산자 과부하에서 null을 확인하려면 어떻게합니까? (0) | 2020.08.02 |
Google Maps InfoWindow 스타일링 (0) | 2020.08.02 |
템플릿 바인딩과 바인딩은 무엇입니까? (0) | 2020.07.30 |