developer tip

컬 오류 18-미해결 읽기 데이터가 남아있는 상태로 전송이 종료 됨

copycodes 2020. 11. 28. 09:41
반응형

컬 오류 18-미해결 읽기 데이터가 남아있는 상태로 전송이 종료 됨


curl을 사용하여 URL에서 데이터를 검색 할 때 가끔 (80 %의 경우)

오류 18 : 미해결 읽기 데이터가 남아있는 상태로 전송이 닫혔습니다.

반환 된 데이터의 일부가 누락되었습니다. 이상한 점은 CURLOPT_RETURNTRANSFER가 false로 설정되면 절대 발생하지 않는다는 것입니다. 즉, curl_exec 함수가 데이터를 반환하지 않고 콘텐츠를 직접 표시합니다.

무엇이 문제일까요? 이러한 행동을 피하기 위해 몇 가지 옵션을 설정할 수 있습니까?


나는 이것이 Content-Length피어가 보낸 잘못된 헤더 와 관련이 있다고 확신합니다 . 내 조언은 curl이 자체적으로 길이를 설정하도록하는 것입니다.


오류 문자열은 libcurl이 보는 것과 정확히 일치합니다. 청크 인코딩 스트림을 수신하기 때문에 수신 할 청크에 데이터가 남아있는시기를 알고 있습니다. 연결이 닫히면 libcurl은 마지막으로받은 청크가 불완전하다는 것을 알고 있습니다. 그러면이 오류 코드가 나타납니다.

요청이 수정되지 않은 상태에서이 오류를 피할 수있는 방법은 없지만 대신 HTTP 1.0 요청을 발행하여 문제 해결할 수 있지만 (청크 인코딩이 발생하지 않기 때문에) 사실 이것은 결함 일 가능성이 가장 높습니다. 서버 또는 네트워크 / 설정에서 어떻게 든.


나는 같은 문제가 있었지만 cURL이 일반적으로 보내는 'Expect : 100-continue'헤더를 억제하여 문제를 해결했습니다 (다음은 PHP 코드이지만 다른 cURL API와 유사하게 작동해야 함).

curl_setopt($curl, CURLOPT_HTTPHEADER, array('Expect:'));

그건 그렇고, 나는 모든 종류의 문제가있는 JDK 6 REST에 포함 된 HTTP 서버에 호출을 보내고 있습니다. 이 경우 먼저 100 개의 응답을 보낸 다음 일부 요청에서는 후속 200 개의 응답을 올바르게 보내지 않습니다.


Guzzle을 사용하는 동안에도이 오류가 표시됩니다. 다음 헤더가 나를 위해 수정했습니다.

'headers' => [
    'accept-encoding' => 'gzip, deflate',
],

나는 Postman에 요청을 발행하여 완전한 응답을 받았고 오류가 없었습니다. 그런 다음 Postman이 Guzzle 요청에 보내는 헤더를 추가하기 시작했는데 이것이 수정 한 것입니다.


내 서버 프로세스가 응답을 생성하는 동안 예외가 발생하고 작별 인사없이 연결을 닫았을 때이 오류가 발생했습니다. curl은 여전히 ​​연결에서 데이터를 예상하고 불평했습니다.


나는 pycurl과 함께 일하는이 문제가 있었고 사용하여 해결했습니다.

c.setopt(pycurl.HTTP_VERSION, pycurl.CURL_HTTP_VERSION_1_0) 

같은 에릭 카론은 말했다.


이 방법으로이 오류를 해결했습니다.

$ch = curl_init ();
curl_setopt ( $ch, CURLOPT_URL, 'http://www.someurl/' );
curl_setopt ( $ch, CURLOPT_TIMEOUT, 30);
ob_start();
$response = curl_exec ( $ch );
$data = ob_get_clean();
if(curl_getinfo($ch, CURLINFO_HTTP_CODE) == 200 ) success;

여전히 오류가 발생하지만 응답 데이터를 변수로 처리 할 수 ​​있습니다.


실수로 파일을 자신에게 다운로드 할 때이 오류가 발생했습니다.
(원격 디렉토리의 sshfs 마운트에 심볼릭 링크를 만들어 다운로드 할 수 있도록하고 작업 디렉토리를 전환하는 것을 잊고 사용했습니다 -OJ.)

이 글을 읽을 때 "도움"이되지는 않을 것 같습니다. 파일이 폐기되었음을 의미하기 때문입니다.

참고 URL : https://stackoverflow.com/questions/1759956/curl-error-18-transfer-closed-with-outstanding-read-data-remaining

반응형