有没有人使用过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);
?>
答案 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状态代码并刷新令牌。