Как пройти аутентификацию на фиде Vebra с использованием php? - PullRequest
1 голос
/ 17 августа 2011

Кто-нибудь работал с Vebra API?В их документации есть пример C # для аутентификации, но я буду использовать php.Они задают базовую аутентификацию HTTP с парой имя пользователя: пароль, закодированной в базу 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 Ответ

1 голос
/ 27 сентября 2011

Этим утром я боролся с этим, но думаю, что взломал его. Итак, я обобщу свой код здесь:

// 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 и обновления токена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...