2013-03-19 2 views
1

새로운 Basecamp Api을 통해 기존 Basecamp 프로젝트를 편집하려고합니다. 난 그냥 멍청한 짓을하고 있어요 확신PHP의 Basecamp API "PUT"에있는 cURL

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10); 
curl_setopt($ch, CURLOPT_URL, 'https://basecamp.com/****/api/v1/projects/****.json'); 
curl_setopt($ch, CURLOPT_USERAGENT, "User-Agent : Holy Grail ([email protected])"); 
curl_setopt($ch, CURLOPT_TIMEOUT, 10); 
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json')); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
curl_setopt($ch, CURLOPT_USERPWD, "$username:$password"); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT"); 
curl_setopt($ch, CURLOPT_POSTFIELDS, array("name" => "from cURL")); 



$result = curl_exec($ch); 
echo $result; 
curl_close($ch); 


if ($result == false) { 
echo "Fetch failed" ; 
} 
else { 
$obj = json_decode($result, true); 
} 

//var_dump($obj); 



?> 

하지만 어떤 도움에 감사드립니다 :

lexical error: malformed number, a digit is required after the minus sign. ---------------  ---------------6 (right here) ------^ 

내 코드 :이 오류가 발생하고있다.

감사합니다.

UPDATE 내가 지금 무엇을 가지고 :

$username = 'user'; 
$password = 'pass'; 
$data = json_encode(array("name" => "from cURL")); 

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10); 
curl_setopt($ch, CURLOPT_URL, 'https://basecamp.com/****/api/v1/projects/*****.json'); 
curl_setopt($ch, CURLOPT_TIMEOUT, 10); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);  
curl_setopt($ch, CURLOPT_USERPWD, "$username:$password"); 
curl_setopt($ch, CURLOPT_HEADER, 1); 
curl_setopt($ch, CURLOPT_PUT, 1); 
curl_setopt($ch, CURLOPT_USERAGENT, 'User-Agent : Holy Grail  ([email protected])'); 
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(
               'Content-Type :application/json', 
               'Content-Length: ' .strlen($data))); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $data); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 





$result = curl_exec($ch); 
echo $result; 
curl_close($ch); 


if ($result == false) { 
echo "Fetch failed" ; 
} 
else { 
$obj = json_decode($result, true); 
} 

//var_dump($obj); 



?> 
</body> 
</html> 

답변

1

BasecampAPI, 당신은 -d 매개 변수에 여기에서 볼 수있는 유일한 JSON 데이터를 받아 -

curl -u username:password \ 
    -H 'Content-Type: application/json' \ 
    -H 'User-Agent: MyApp ([email protected])' \ 
    -d '{ "name": "My new project!" }' \ 
    https://basecamp.com/999999999/api/v1/projects.json 

그래서 당신은 전송하지 않을 JSON을 이 줄의 데이터 -

curl_setopt($ch, CURLOPT_POSTFIELDS, array("name" => "from cURL")); 

CUSTOMREQUEST 옵션을 제거하고 CURLOPT_PUT을 추가하십시오. 코드를 다음으로 수정하십시오. -

$data_string = json_encode(array("name" => "from cURL")); 
... 

curl_setopt($ch, CURLOPT_HEADER, 1); 
curl_setopt($ch, CURLOPT_PUT, True); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);                 
curl_setopt($ch, CURLOPT_HTTPHEADER, array(                   
    'Content-Type: application/json',                     
    'Content-Length: ' . strlen($data_string))                  
);     
+0

'403 금지됨'이 표시됩니다. 이유를 이해할 수 없습니다. –

+0

계정 소유자의 로그인 세부 정보를 사용하고 있습니다. 나는 사용자와 패스가 요청에 대한 허가를 가지고 있음을 알고있다. –

+0

'CURLOPT_USERPWD' 라인 앞에'curl_setopt ($ ch, CURLOPT_RETURNTRANSFER, true);'*를 넣으십시오. 또한'CURLOPT_HEADER'를'True'에 추가하십시오. –