2016-07-02 88 views
0

嘗試使用PHP和CURL調用訪問Dropbox v2 API調用。基於沙盒https://dropbox.github.io/dropbox-api-v2-explorer/#files_search,「顯示代碼」看起來像這樣。使用PHP CURL調用不起作用的Dropbox v2 API問題

curl -X POST https://api.dropboxapi.com/2/files/search \ 
    --header 'Authorization: Bearer myAccessTokenHere \ 
    --header 'Content-Type: application/json' \ 
    --data '{"path":"/My Cars","query":"\".j\"","start":0,"max_results":50}' 

我的PHP代碼如下所示

function performSearch() 
{ 
    $cheaders = array("Authorization: Bearer myAccessTokenHere", 
       'Content-Type: application/json', 
       'Dropbox-API-Arg: {"path":"/My Cars","query":"\".j\"","start":"0","max_results":"50"}'); 

    $ch = curl_init('https://content.dropboxapi.com/2/files/search'); 
    curl_setopt($ch, CURLOPT_HTTPHEADER, $cheaders); 
    curl_setopt($ch, CURLOPT_POST, true); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    $response = curl_exec($ch); 

    echo "\n response = $response"; 
    curl_close($ch); 
} 

當我執行它,我得到

響應= { 「錯誤」: 「未找到」}

回答

1

請試試這個:

$ch = curl_init(); 

curl_setopt($ch, CURLOPT_URL, "https://api.dropboxapi.com/2/files/search"); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, "{\"path\":\"/My Cars\",\"query\":\"\".j\"\",\"start\":0,\"max_results\":50}"); 
curl_setopt($ch, CURLOPT_POST, 1); 

curl_setopt($ch, CURLOPT_HTTPHEADER, [ 
    "Authorization: Bearer myAccessTokenHere", 
    "Content-Type: application/json" 
]); 

$result = curl_exec($ch); 
if (curl_errno($ch)) { 
    echo 'Error:' . curl_error($ch); 
} 
curl_close ($ch); 
echo "\n response = $result"; 
+0

謝謝你的迴應,比我更接近,但這個代碼返回一個錯誤,不知道它說的是哪個部分 - response =調用API函數「files/search」時出錯:請求正文:無法解碼輸入爲JSON – JMoskwa

+0

錯誤是說你的請求體中的JSON(也就是你的參數給AP我打電話)是無效的。看起來你在那裏有一對額外的'\'',你可能意思是:''{\「path \」:\「/ My Cars \」,\「query \」:\「。j \」 ,「start」:0,\「max_results \」:50}「)' – Greg

0

感謝指針傢伙 - 新代碼 - 無法獲取錯誤,但現在我沒有得到任何結果返回....我在實際調用之外添加了一些轉換,以便我可以看到什麼JSON字符串是在

傳遞下面是新的代碼

$path = "/My Cars"; 
$query = ".j"; 
$start = 0; 
$max_results = 50; 

$accessToken = $this->accessToken; 
$ch = curl_init(); 

curl_setopt($ch, CURLOPT_URL, "https://api.dropboxapi.com/2/files/search"); 
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
      curl_setopt($ch, CURLOPT_POST, 1); 


$arr = array('path'=>$path, "query"=>$query, "start"=>$start, "max_results"=>$max_results, 
            "mode"=>(array(".tag"=>"filename_and_content"))); 
$jArr = json_encode($arr); 

$arrNull = array("body"=>""); 
$jNull = json_encode($arrNull); 

echo "\n\n" . $jArr; 
echo "\n\n" . $jNull; 

curl_setopt($ch, CURLOPT_POSTFIELDS, $jArr); 

curl_setopt($ch, CURLOPT_HTTPHEADER, [ 
          "Authorization: Bearer $accessToken", 
          "Content-Type: application/json" 
      ]); 


$result = curl_exec($ch); 
if (curl_errno($ch)) { 
      echo 'Error:' . curl_error($ch); 
} 
curl_close ($ch); 
echo "\n result = $result"; 

return ($result); 

這是我得到的輸出 - 沒有誤差修改,但沒有內容???? (我試過不同的目錄,在沙箱裏「/ My Cars」返回6個結果)

{「path」:「/ My Cars」,「query」:「。j」,「start」: 0 「MAX_RESULTS」:50, 「模式」:{」。標籤 「:」 filename_and_content 「}}

{」 本體 「:」 「}

結果= {」 匹配 「:[],」更多 「:假的, 」開始「:6}

+0

似乎沙箱的工作方式與實際API端點不同,而不是」query「:」,j「我試過」query「:」 .jpg「,並且返回了該目錄中的6個jpg文件。我還嘗試追加模式」:{「。標籤「:」filename_and_content「}}但我得到一個錯誤,所以我離開它希望此線程可以幫助一直有問題的v2界面 – JMoskwa

0

解決 - 改變$查詢

$查詢=」 .JPG「;

我現在得到結果。

供參考:上文不再在代碼需要是以下行

$ arrNull =陣列( 「身」=> 「」); $ jNull = json_encode($ arrNull);

,並刪除了「回聲」函數調用在生產中使用...

謝謝你幫我解決了我的錯誤,希望這將幫助別人

約翰