API需要编码的API密钥,如何使用curl发送?

时间:2016-03-11 16:49:56

标签: php curl

我正在使用api,它需要在curl调用的基本身份验证中发送api密钥。

    $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的curl请求时有效。

我认为USERPWD不是正确使用的curlopt,哪一个是?

来自docs:

Base64编码的字符串,由组合的用户名:密码生成 序列

在我们的例子中,API密钥设置为用户名,密码设置为空 字符串。

例如,如果API Key等于N8KzwcqVUxAI1RoPi5jyFJPkPlkDl9vF,

应该在以下字符串上执行Base64编码: N8KzwcqVUxAI1RoPi5jyFJPkPlkDl9vF:

在这种情况下,发送到的内容 授权标题是 基本TjhLendjcVZVeEFJMVvvkk1anlGSlBrUGxrRGw5dkY6。

API Docs

2 个答案:

答案 0 :(得分:0)

USERPWD是正确的,但您可能需要发送

$apiuser:$apikey

现在看来,你只是发送密钥。

答案 1 :(得分: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);