2014-02-10 52 views
-3

我遇到了使用自定義標題的PHP curl命令的問題。任何人都可以看到這裏發生了什麼?關於PHP的錯誤請求Curl

$url = "https://api.sitescout.com/oauth/token"; 
    $ch = curl_init(); 

    $headers = array(
    "POST https://api.sitescout.com/oauth/token HTTP/1.1", 
    "Host: api.sitescout.com", 
    "Authorization: Basic bGFtcGhvdXNlLWFwaTp2RmhsSmlJMm5BT****", 
    "Content-Type: application/x-www-form-urlencoded", 
    "Accept: application/json", 
    "Content-Length: 41" 
); 

    $post_fields = array(
    'grant_type' => 'client_credentials' 
); 

    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_HEADER, true); 
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); 
    curl_setopt($ch, CURLOPT_TIMEOUT, 60); 
    curl_setopt($ch, CURLOPT_POST, true); 
    curl_setopt($ch, CURLOPT_POSTFIELDS, $post_fields); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); 

    $output = curl_exec($ch); 
    $info = curl_getinfo($ch); 

print_r($output); 

    curl_close($ch); 

    //var_dump($output); 

這是服務器響應。

HTTP/1.1 400錯誤的請求 服務器:Apache-狼/ 1.1 日期:星期一,2014年2月10日5時13分09秒GMT 連接:關閉

任何幫助將不勝感激!

+0

壞後的數據? – shapeshifter

+0

你是否解決了這個問題,我得到了同樣的問題,讓我知道你是否可以幫助我。 – s4suryapal

回答

0

我覺得你還需要添加USERAGENT參數:

curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.0.3705; .NET CLR 1.1.4322)'); 

這將意味着什麼類型的代理請求的內容。

+0

謝謝,但我無法得到這個幫助。我仍然收到同樣的錯誤。 – user1759665

0

你可以嘗試這樣的,

$url = "https://api.sitescout.com/oauth/token"; 
$requestType ='POST'; 
$accessToken = 'Insert Your accessToken'; 

/* data you want to post */ 
$data = array(
      'subject'=>$subject, 
      'starttime'=>$start, 
      'endtime'=>$end, 
      'passwordrequired'=>'false' 
     ); 

$postData = json_encode ($data); 
$headers = getJsonHeaders($accessToken); 

makeApiRequest($url, $requestType, $postData, $headers); 

public function makeApiRequest ($url = null, $requestType = 'GET', $postData = array(),$headers = array()) 
{ 
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 

    if ($requestType == 'POST') { 
     curl_setopt($ch, CURLOPT_POST, 1); 
     curl_setopt($ch, CURLOPT_POSTFIELDS, $postData); 
    }else if($requestType == 'PUT'){ 
     curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT"); 
     curl_setopt($ch, CURLOPT_POSTFIELDS, $postData); 
    } 

    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); 
    $data = curl_exec($ch); 

    $validResponseCodes = array(200, 201); 
    $responseCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); 

    if($requestType == 'PUT'){ 
     return $responseCode; 
    } 

    if (curl_errno($ch)) { 
     curl_close($ch); 
     return curl_error($ch); 
    } 
    elseif (!in_array($responseCode, $validResponseCodes)) { 
     if (isJson($data)) { 
      $data = json_decode($data); 
     } 
    } 

    curl_close($ch); 
    return $data; 
} 

public function getJsonHeaders ($accessToken) 
{ 
    return array(
     "HTTP/1.1", 
     "Content-type: application/json", 
     "Accept: application/json", 
     "Authorization: OAuth oauth_token=". $accessToken 
    ); 
} 

public function isJson ($string) 
{ 
    $isJson = 0; 
    $decodedString = json_decode($string); 

    if (is_array($decodedString) || is_object($decodedString)) { 
     $isJson = 1; 
    } 

    return $isJson; 
} 
+0

奇數,我試過這個,並得到這個錯誤:可捕捉的致命錯誤:class stdClass的對象無法轉換爲/homepages/33/d451511314/htdocs/bemixt/sitescout.php上的字符串88行 – user1759665

+0

已更新,請確保您通過數據數組和accesstoken根據您提供的。 –

+0

我實際上是將令牌硬編碼到函數中。我仍然有相同的stdclass錯誤。 – user1759665