2013-08-06 2 views
1

광범위하게 검색했지만 내 문제와 관련된 주제를 찾을 수 없어 새로운 질문을하기로했습니다 ...CURL 호출은 터미널에서 작동하지만 PHP에서는 지원되지 않습니다

내가 터미널에서 잘 작동 CURL을 사용하여 페이스 북 그래프 API에 배치 요청을 발행하기 위해 노력하고있어,하지만 단순히 PHP에서 ...

이 단계가 재현되지 않습니다

1.) 그래프 API 탐색기에서 액세스 토큰을 얻습니다 (권한이 필요없고 유효한 토큰 만). 링크 : http://developers.facebook.com/tools/explorer

2) 다음 터미널 명령을 붙여 넣기 : 제대로 작동하려면 총 4 개 자리에 붙여에 (주의 사항, 당신은 필요)

curl \ 
-F 'access_token=PASTE_ACCESS_TOKEN_HERE' \ 
-F 'batch=[{"method":"GET","relative_url":"fql?q=SELECT+name+FROM+user+WHERE+uid%3Dme%28%29&access_token=PASTE_ACCESS_TOKEN_HERE"},{"method":"GET","relative_url":"fql?q=SELECT+name+FROM+user+WHERE+uid%3Dme%28%29&access_token=PASTE_ACCESS_TOKEN_HERE"},{"method":"GET","relative_url":"fql?q=SELECT+name+FROM+user+WHERE+uid%3Dme%28%29&access_token=PASTE_ACCESS_TOKEN_HERE"}]' \ 
https://graph.facebook.com 

3) 터미널에서 실행! , 헤더 섹션을 많이 반환해야하며, body 섹션 (JSON 인코딩)에서 네 번 네 이름을 반환해야합니다.

4. 지금까지 모든 것이 작동해야합니다.

<?php 
$url = 'https://graph.facebook.com'; 
$fields = array(
         'access_token' => 'PASTE_ACCESS_TOKEN_HERE', 
         'batch' => 
'[{"method":"GET","relative_url":"fql?q=SELECT+name+FROM+user+WHERE+uid%3Dme%28%29&access_token=PASTE_ACCESS_TOKEN_HERE"},{"method":"GET","relative_url":"fql?q=SELECT+name+FROM+user+WHERE+uid%3Dme%28%29&access_token=PASTE_ACCESS_TOKEN_HERE"},{"method":"GET","relative_url":"fql?q=SELECT+name+FROM+user+WHERE+uid%3Dme%28%29&access_token=PASTE_ACCESS_TOKEN_HERE"}]' 
); 
//url-ify the data for the POST 
foreach($fields as $key=>$value) { $fields_string .= $key.'='.$value.'&'; } 
$fields_string = rtrim($fields_string, '&'); 

//open connection 
$ch = curl_init(); 

//set the url, number of POST vars, POST data 
curl_setopt($ch,CURLOPT_URL, $url); 
curl_setopt($ch,CURLOPT_POST, count($fields)); 
curl_setopt($ch,CURLOPT_POSTFIELDS, $fields_string); 

//execute post 
$result = curl_exec($ch); 

//close connection 
curl_close($ch); 

print_r($result); 
?> 

6.) 코드를 실행, 당신은 (적어도 내가 할 수 ...)을 얻을해야합니다 : 여기에 잘못된 부분이 온다, 는 다음과 같은 PHP 스크립트의 4 자리에 다시 토큰을 붙여 Facebook에서 오류 메시지 : '{ "오류": { "메시지": "잘못된 액세스 토큰 ACCESS_TOKEN_HERE .... \"}] ","OAuthException ","code ": 190}} 1'

페이스 북은 JSON 닫기 중괄호가 액세스 토큰의 일부라고 생각하고이 오류를 반환하기 때문에 $ fields [ 'batch']의 끝에서 이스케이프 된 큰 따옴표와 중괄호를 제거하려고했습니다. , 그런 다음 배치 매개 변수가 JSON 문자열 (분명히 ...)

뭔가가 없거나이 Facebook의 잘못입니까? 그렇다면 왜 터미널 솔루션이 작동하는지 이해할 수 없습니까? 여기

은 BTW 공식 페이스 북 문서입니다 : 사전에 http://developers.facebook.com/docs/reference/api/batch

감사합니다!

편집 : (이것은 쉘 스크립트를 사용하기 때문에, 물론) 나는 (일시적으로) 해결 방법을 발견 , 이것은 작동합니다 :이 나쁜 솔루션 인 이유

<?php 
$result = shell_exec('curl \ 
-F \'access_token=PASTE_ACCESS_TOKEN_HERE\' \ 
-F \'batch=[{"method":"GET","relative_url":"fql?q=SELECT+name+FROM+user+WHERE+uid%3Dme%28%29&access_token=PASTE_ACCESS_TOKEN_HERE"},{"method":"GET","relative_url":"fql?q=SELECT+name+FROM+user+WHERE+uid%3Dme%28%29&access_token=PASTE_ACCESS_TOKEN_HERE"},{"method":"GET","relative_url":"fql?q=SELECT+name+FROM+user+WHERE+uid%3Dme%28%29&access_token=PASTE_ACCESS_TOKEN_HERE"}]\' \ 
https://graph.facebook.com'); 

print_r(json_decode($result),true); 
?> 

누군가가 알고 있나요 (I PHP-cURL을 사용하는 것보다)? 어딘가에 PHP에서 쉘 스크립트를 사용해서는 안되는 이유를 모르지만 왜 그런지 모르겠습니다 ...

고마워!

+0

Facebook : https : //developers.facebook에서 문서에 대한 링크를 추가하는 것을 잊었습니다.co.kr/docs/reference/api/batch/ –

+0

답변을 편집 할 수 있습니다. – Freelancer

+0

전체적인 토큰을 보내고 있으므로 배치에서 모든 액세스 토큰을 제거하는 방법은 어떻습니까? 아니면 실제 배치에서 별도의 사용자를 쿼리하고 있습니까? –

답변

0

curl 명령을 시작하기 전에 $fields_string의 내용이 무엇인지 확인하기 위해 코드의 첫 번째 절반을 실행했습니다. 어떤 이유로 rtrim은 문자열의 마지막 앰퍼샌드를 제거하지 않습니다. 아마도 마지막 문자를 제거하는 대신 다음을 사용하십시오.

$fields_string = substr($fields_string, 0, -1); 
+0

시도해보십시오. 불행히도 작동하지 않았습니다. 동일한 오류가 발생했습니다. (그러나 팁을 주셔서 감사합니다! –

관련 문제