如何使用php对Vebra feed进行身份验证?

时间:2011-08-17 15:28:07

标签: php curl

有没有人使用过Vebra API?在他们的文档中,他们有一个用于身份验证的C#示例,但我将使用php。它们指定HTTP基本身份验证,其用户名:密码对编码为base 64。

初始调用需要用户名:密码对,结果是令牌。后续调用在给定的时间范围内(一小时)需要此令牌。

我在使用curl进行身份验证时遇到问题,更不用说确定我需要的响应头中的令牌了。

我使用了正确的选项吗?

这是我写的一个基本的卷曲工作......     

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLINFO_HEADER_OUT, true);

$result = curl_exec($ch);

// Handle the result - fail or success
if (!curl_errno($ch)) {

// get the response headers
//$info = curl_getinfo($ch);

var_dump ($result);
var_dump (curl_getinfo($ch));

// extract the token from the response header
//....
}
curl_close($ch);
?>

1 个答案:

答案 0 :(得分:1)

今天早上我一直在努力解决这个问题,但我想我已经破解了它。所以我在这里总结一下我的代码:

// get token
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); 
curl_setopt($ch, CURLOPT_HEADER, TRUE);
curl_setopt($ch, CURLOPT_URL, $url);
$userpass = "$username:$password";
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Authorization: Basic '.base64_encode($userpass) )); // I found this to be the only way of consistently authorising between user-password combo and using a token

$response = curl_exec($ch);

// little bit of nasty parsing code    
list($headers, $body) = explode("\r\n\r\n", $response);
$headers = nl2br($headers);
$headers = explode('<br />', $headers);

foreach($headers as $header) {
    $components = explode(': ', trim($header));
    $headers[$components[0]] = $components[1];
}

$token = $headers['Token'];

然后后续调用需要使用令牌,如下所示:

curl_setopt($ch, CURLOPT_HTTPHEADER, array('Authorization: Basic '.base64_encode($token) ));

我一直在使用curl_getinfo()检查401状态代码并刷新令牌。