2013-07-31 4 views
2

URL 만 사용하여 PUT 메서드로 cURL 요청을 수행 할 수 있습니까? 여기에 내가 PUT 방법으로 컬을 사용하여 호출 할 수하고자하는 URL입니다 : 나는 그것이 REST 콘솔 (크롬 확장)를 사용하지만 컬을 사용하지 작동하게 할 수 있었다
$url = https://url.net/card/activate.xml?card_id=1234567890&application_key=123123&accesskey=abcdefPUT 메서드가있는 cURL

. 나는 curl_setoptCURLOPT_PUT, CURLOPT_INFILECURLOPT_INFILESIZE과 함께 사용하려고 시도했지만 빈 페이지를 받았다. 전혀 응답이 없었다.

는 헤더와 컬 옵션은 내가 현재 가지고 있습니다 : 현재

$header[] = 'Authorization: Basic abc123'; 
$header[] = 'Accept: text/xml'; 

curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'PUT'); 
curl_setopt($curl, CURLOPT_URL, $url); 
curl_setopt($curl, CURLOPT_HTTPHEADER, $header); 
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); 
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); 
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 

$output = curl_exec($soap_do); 

, 이러한 설정으로, 내가 411 길이 필요 오류를 받고 있어요. 그런 식으로 작동하게 만들 수 있을까 아니면 절대로 작동하지 않을 구성을하려고합니까?

+2

아마도'curl_setopt ($ curl, CURLOPT_HTTPHEADER, array ('Content-length : 0'));'? (또는 오히려 기존 헤더에 추가) –

+0

내 헤더 배열에 Content-Length : 0을 추가했는데 효과가있었습니다. – oliboon

답변

3

는 HTTP 411 오류

웹 서버 (웹 사이트를 실행하는) 클라이언트에서 보낸 HTTP 데이터 스트림 (예 : 웹 브라우저 또는 우리의 CheckUpDown 로봇)는 '콘텐츠 길이를 포함해야한다는 생각

' 사양. 이는 일반적으로 웹 서버에 데이터를 가져 오는 것이 아니라 해당 데이터를 웹 서버에 배치하는 HTTP 메서드에만 사용됩니다.

당신은 당신의 데이터

$header[] = 'Content-length: '.strlen($put_data); 

의 내용 길이를 설정해야합니다 또는 당신이 어떤 데이터가없는 경우, 그냥 0을 넣어.

+0

헤더에 Content-Length : 0을 설정하여 작동합니다. 나는 Content-Length가 요청에 의해 사용되었고 전송 된 데이터의 길이가되어야한다고 생각했었다. 그렇지 않으면 작동하지 않을 것이다. – oliboon

관련 문제