cURL이 에러 「(23) Failed write body」를 반환하는 이유는 무엇입니까?
단일 툴로서 정상적으로 동작합니다.
curl "someURL"
curl -o - "someURL"
파이프라인에서는 작동하지 않습니다.
curl "someURL" | tr -d '\n'
curl -o - "someURL" | tr -d '\n'
반환:
(23) Failed writing body
cURL 출력 배관에는 어떤 문제가 있습니까?cURL 출력 전체를 버퍼링하고 처리하려면 어떻게 해야 합니까?
이 문제는 이전 프로그램이 전체 페이지 쓰기를 완료하기 전에 파이핑된 프로그램(예: grep)이 읽기 파이프를 닫았을 때 발생합니다.
»curl "url" | grep -qs foo
body"시킵니다.grep는 " writing body" 에러를 발생시킵니다.URL: "Failed writing body" (쓰기 실패)
회피책은 다음 프로그램에 전달하기 전에 항상 페이지 전체를 읽는 중간 프로그램을 통해 스트림을 파이프하는 것입니다.
예.
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
및 -syslog-를 지정합니다.o
.-o
★★★★
curl [url] > [file]
서버의 디스크 용량이 부족합니다.
df -k .
파이프로 연결하려고 했을 때 디스크 공간이 부족하다는 경고를 받았습니다.tac
다른 답변 중 하나(https://stackoverflow.com/a/28879552/336694)에서 설명한 바와 같이 두 번 클릭합니다.에러 메세지가 표시되었다.write error: No space left on device
.
그래서 부호화의 문제였군요.Iconv가 문제를 해결하다
curl 'http://www.multitran.ru/c/m.exe?CL=1&s=hello&l1=1' | iconv -f windows-1251 | tr -dc '[:print:]' | ...
.source <( curl -sS $url )
,를 (23) Failed writing body
에러. 를 러러에서 수 입니다. 프로세스 대체를 소싱하는 것이 기능하지 않기 때문입니다.bash 3.2
의 (macOS 의 디폴트).
대신 이 회피책을 사용할 수 있습니다.
source /dev/stdin <<<"$( curl -sS $url )"
에서 sudo
다음과 같습니다예를 들어 다음과 같습니다.
sudo curl -O -k 'https url here'
주의: -O(이것은 0이 아닌 대문자o) & -k(https URL의 경우)
같은 에러가 났는데 다른 이유가 있어요.제 경우 (tmpfs) 파티션이 1GB밖에 없어서 큰 파일을 다운로드하고 있었는데, 그 파티션의 모든 메모리가 드디어 꽉 찼고, 당신과 같은 에러가 발생했습니다.
'아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 하고 있었어요.curl <blabla> | jq | grep <blibli>
★★★★★★★★★★★★★★★★ jq .
가 있었습니다.curl <blabla> | jq . | grep <blibli>
다음 작업을 수행할 때 동일한 문제가 발생했습니다.
curl -L https://packagecloud.io/golang-migrate/migrate/gpgkey | apt-key add -
위의 쿼리는 루트 권한을 사용하여 실행해야 합니다.
다음과 같은 방법으로 작성하면 문제가 해결되었습니다.
curl -L https://packagecloud.io/golang-migrate/migrate/gpgkey | sudo apt-key add -
sudo
전에curl
하면 ' , , , 、 , 、 , 、 를 、 , 。Failed writing body
저는 허가 문제였어요.도커 실행은 사용자 프로파일을 사용하여 호출되지만 root은 컨테이너 내의 사용자입니다.해결책은 /tmp에 curl write를 만드는 것이었습니다.그것은 루트뿐만 아니라 모든 사용자에 대한 쓰기 권한을 가지고 있기 때문입니다.
-o 옵션을 사용했습니다.
- o / tmp / file_to_files
메세지는 ubuntu. 에 를 인스톨 하려고 때에 했습니다., 로 인해 했습니다.
(23) Failed writing body
그 때문에, 나에게 효과가 있는 솔루션을 투고하고 있습니다.
는 root 명령어를 실행 합니다.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 -
@Kaworu의 설명은 훌륭합니다.https://stackoverflow.com/a/28879552/198219
이 문제는 이전 프로그램의 페이지 쓰기가 완료되기 전에 파이프가 연결된 프로그램(예: grep)이 읽기 파이프를 닫았을 때 발생합니다.cURL은 이를 예상하지 못하고 "쓰기 실패" 오류를 발생시킵니다.
회피책은 다음 프로그램에 전달하기 전에 항상 페이지 전체를 읽는 중간 프로그램을 통해 스트림을 파이프하는 것입니다.
@nisetama가 이미 코멘트에서 제안한 바와 같이 스펀지를 사용하는 것이 더 올바른 구현이라고 생각합니다.
curl "url" | sponge | grep -qs foo
jq가 설치되어 있지 않은 상태에서 jq를 사용하려고 하면 이 오류가 발생하였습니다.그러니... 사용하려는 경우 jq가 설치되어 있는지 확인하십시오.
제 오타 때문에 같은 질문을 했습니다.
# fails because of reasons mentioned above
curl -I -fail https://www.google.com | echo $?
curl: (23) Failed writing body
# success
curl -I -fail https://www.google.com || echo $?
Bash 및 zsh(및 기타 셸)에서는 프로세스 치환(Bash/zsh)을 사용하여 파일을 즉시 작성한 후 파이프라인 체인의 다음 프로세스에 대한 입력으로 사용할 수 있습니다.
를 들어의 JSON 하기 위해 "cURL"의 JSON 출력을 해석하려고 .jq
그리고.less
, 그러나, 그 정보를 입수하고 있었습니다.Failed writing body
에러입니다.
# Note: this does NOT work
curl https://gitlab.com/api/v4/projects/ | jq | less
프로세스 치환으로 다시 썼더니 작동했어요!
# this works!
jq "" <(curl https://gitlab.com/api/v4/projects/) | less
주의:jq
두 번째 인수를 사용하여 입력 파일을 지정합니다.
보너스: 사용하시는 경우jq
저처럼 컬러화된 출력을 유지하고 싶습니다.less
대신 다음 명령줄을 사용합니다.
jq -C "" <(curl https://gitlab.com/api/v4/projects/) | less -r
(Kowaru의 설명에 감사 드립니다. Failed writing body
발생하고 있었습니다.단, 델의 솔루션은tac
두 번은 통하지 않았어또, 대용량 파일에 맞추어 확장할 수 있는 솔루션을 찾고 싶다고 생각하고, 그 답변에 코멘트로 기재되어 있는 그 외의 문제를 회피하려고 하고 있습니다.
(23) curl: (23) failed write body. 나중에 curl을 통해 rpm 패키지를 다운로드 할 수 있는 공간이 부족하다는 것을 알게 되어 문제가 발생하였습니다.해결할 수 있는 공간과 이슈를 확보했습니다.
flag -s를 추가했더니 효과가 있었어요.예: curl - o - s https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash
언급URL : https://stackoverflow.com/questions/16703647/why-does-curl-return-error-23-failed-writing-body
'programing' 카테고리의 다른 글
Windows용 Objective-C (0) | 2023.04.11 |
---|---|
목록에서 고유한 값 목록을 가져옵니다. (0) | 2023.04.11 |
배열 또는 두 날짜 사이의 모든 날짜 목록 만들기 (0) | 2023.04.11 |
EventTrigger를 사용하여 속성 설정 (0) | 2023.04.11 |
문자열 배열에 문자열이 포함되어 있는지 확인하기 위해 C# 사용 (0) | 2023.04.11 |