2013-08-05 9 views
0

Content-Length 헤더없이 실행하는 경우 411 길이의 오류가 발생하는 cURL 요청이 있습니다. 내 머리글 배열에 $header[] = 'Content-Length: 0을 추가하면 천천히 (~ 15 초) 실행됩니다.POST cURL 요청으로 실행 속도가 느림

같은 코드를 다른 도메인에서 아무 문제없이 사용합니다. 이 도메인에서는 콘텐츠 길이 헤더를 설정할 필요가 없으며 411 오류가 표시되지 않습니다. 나는 PUT 요청이 나에게이 오류를 제공해야하기 때문에 Content-Length 오류가 이슈와 관련이 있다고 생각한다.

이 내 현재의 컬을 요청입니다 :

$curl = curl_init(); 

$header[] = 'Authorization: Basic 123123'; 
$header[] = 'Accept: text/xml'; 
//$header[] = 'Content-Length: 0'; 

curl_setopt($curl, CURLOPT_POST, true); 
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); 
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); 
curl_setopt($curl, CURLOPT_URL, $url); 
curl_setopt($curl, CURLOPT_POSTFIELDS, $data); 
curl_setopt($curl, CURLOPT_HTTPHEADER, $header); 
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 

$output = curl_exec($curl); 
$error = curl_error($curl); 

편집 : 내 CURLOPT_URL을 변경하고 CURLOPT_POSTFIELDS을 추가했습니다. 대신

curl_setopt($curl, CURLOPT_URL, $url . $data); 

나는 Content-Length 헤더에 대한 필요성을 제거 할 수 있었지만 요청이 여전히 몹시 느린이 방법의

curl_setopt($curl, CURLOPT_URL, $url); 
curl_setopt($curl, CURLOPT_POSTFIELDS, $data); 

.

+0

모든 제정신 서버는 보내는 모든 본문을 무시할 것이며'Content-Length : 0' 헤더를 사용하여 유효하지 않은 HTTP 요청을 보내기 위해 헤더를 읽은 직후에 즉시 연결을 끊습니다. 'Content-Length : 0'은 당신이 헤더 뒤에 메시지를 보내는 것을 끝냈다는 것을 서버에 알려줍니다. 가장 좋은 추측은 서버 **가 더 이상 올 수 없다고 말할 때 당신을 믿는다는 것입니다. ** 이후에 조작 된 헤더 (귀하의 엔티티 본문)를 보내면 마약 중독자가 발생합니다. 프로토콜을 따르지 않으면 HTTP를 수행 할 수 없습니다. – rdlowrey

+0

이 문제는 해결되었습니다. 이 요청에는 Content-Length 헤더가 필요하지 않습니다. TTL이 너무 낮은 API 서버에서 문제가 발생했습니다. 우리는 호스트 파일에서이 파일을 고쳤으며 요청에 이제는 정기적 인 실행 속도가 있습니다. – oliboon

답변

0

일부 서버에서는 콘텐츠 길이를 설정해야하지만 그렇지 않은 서버도 있습니다. 이것은 주로 사용되므로 버퍼를 기반으로 할 수 있습니다.

콘텐츠 길이는 0이지만 전송할 데이터의 양은 0으로 설정하면 안됩니다. 0으로 설정하면 일부 서버는로드를 거부합니다.

내가 추측하고있는 것은 0으로 설정했기 때문에 분명히 매우 느린 콘텐츠 바이트/바이트를 읽습니다.

+0

콘텐츠 길이는 PUT 요청에만 필요하므로 POST 요청에서이 오류를 제공하는 것이 이상하다고 생각한 이유입니다. 나는'content-length : 0'으로 PUT 요청을 할 수 있었고 느리지는 않았다. 그러나 'CURLOPT_URL'을 변경하고'CURLOPT_POSTFIELDS' 옵션을 추가하면 411 오류가 수정되었습니다. 다른 서버에서 사용하면 문제가 서버 내부에있는 것 같습니다. – oliboon

+1

@oliboon 당신은 그것이 서버 문제라고 주장하지만 실제로 당신은 표준에 의해 그렇게해야합니다. –

관련 문제