2016-03-11 72 views
0

我正在使用一個API,需要一個API密鑰以curl調用的基本身份驗證方式發送。API需要一個編碼的API密鑰,我如何發送這個curl?

$json = "somedata"; 
    $url = "http.server.com"; 
    $key = "someKey"; 

    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 
    curl_setopt($ch, CURLOPT_MAXREDIRS, 10); 
    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_USERPWD, $key); 
    curl_setopt($ch, CURLOPT_POSTFIELDS, $json); 
    curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type: application/json')); 
    curl_setopt($ch, CURLOPT_USERAGENT, "MozillaXYZ/2.0"); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($ch, CURLOPT_TIMEOUT, 10); 
    $output = curl_exec($ch); 
    curl_close($ch); 

我的回答是:

"Server error","data":{"details":"Invalid API key. 

我知道密鑰本身是正確的,發送的捲曲請求不使用PHP時,它的工作原理。

我假設USERPWD不是正確的curlopt使用,哪一個是?

從文檔:

Base64編碼的字符串,從組合的用戶名生成:密碼 序列。

在我們的例子中,API密鑰被設置爲用戶名,並且密碼被設置爲空的 字符串。

例如,如果API密鑰等於toN8KzwcqVUxAI1RoPi5jyFJPkPlkDl9vF,

Base64編碼應在下面的字符串來執行: N8KzwcqVUxAI1RoPi5jyFJPkPlkDl9vF:

在這種情況下,發送到 該內容的授權報頭是 Basic TjhLendjcVZVeEFJMVJvUGk1anlGSlBrUGxrRGw5dkY6。

API Docs

+0

的可能的複製[我如何使用HTTP基本身份驗證使用PHP捲曲的請求?](HTTP:/ /stackoverflow.com/questions/2140419/how-do-i-make-a-request-using-http-basic-authentication-with-php-curl) – dgig

+0

你可以添加一些API的細節告訴你把鑰匙?用文檔中的某些信息編輯了 – ryantxr

+0

。 – bart2puck

回答

0

USERPWD是正確的,但你可能需要發送

$apiuser:$apikey 

貌似現在,你只是發送鍵。

0

我調整我如何發送的頭:

$headers = array( 
     "POST ".$url." HTTP/1.0", 
     "Content-type: text/xml;charset=\"utf-8\"", 
     "Accept: text/xml", 
     "Cache-Control: no-cache", 
     "Pragma: no-cache", 
     "SOAPAction: \"run\"", 
     "Content-length: ".strlen($xml_data), 
     "Authorization: Basic " . $key 
    ); 

,並添加

 curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); 
相關問題