programing

cURL이 에러 「(23) Failed write body」를 반환하는 이유는 무엇입니까?

abcjava 2023. 4. 11. 21:36
반응형

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 foobody"시킵니다.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

반응형