2017-11-15 6 views
1

Ich versuche, einen Access Token auf der Taboola Backstage-API gemäß dieser Dokumentation zu erhalten.PHP Curl: Das angegebene CSRF-Token konnte nicht überprüft werden, da Ihre Sitzung nicht gefunden wurde

Backstage API - Authentication and General API Usage.pdf

Mein Beispielcode sieht wie folgt aus:

$ckfile = tempnam ("/tmp", "CURLCOOKIE"); 

$post = array(
    "client_id"   => "secret" 
    , "client_secret"  => "secret" 
    , "grant_type"   => "client_credentials" 
); 

    $ch = curl_init(); 

    curl_setopt($ch, CURLOPT_COOKIEJAR, $ckfile); 
    curl_setopt($ch, CURLOPT_COOKIEFILE, $ckfile); 
    curl_setopt($ch, CURLOPT_COOKIESESSION, 0); 
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0); 
    curl_setopt($ch, CURLOPT_USERAGENT, "App Client"); 
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 60); 
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(
      'Content-Type: application/x-www-form-urlencoded' 
    )); 

    curl_setopt($ch, CURLOPT_URL,"https://backstage.taboola.com/backstage/oauth/token/"); 
    curl_setopt($ch, CURLOPT_POST,1); 
    curl_setopt($ch, CURLOPT_POSTFIELDS, $post); 
    curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0); 
    curl_setopt($ch, CURLOPT_VERBOSE, 0); 
    curl_setopt($ch, CURLOPT_HEADER, 0); 
    curl_setopt($ch, CURLOPT_AUTOREFERER, 0); 
    curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1); 

    $result=curl_exec ($ch); 

    $header_size = curl_getinfo($ch, CURLINFO_HEADER_SIZE); 
    $header = substr($result, 0, $header_size); 
    $body = substr($result, $header_size); 

    var_dump($header,$body); 

Wenn ich den Code ausführen ich die Fehlermeldung. Das angegebene CSRF-Token konnte nicht überprüft werden, da Ihre Sitzung nicht gefunden wurde. Was iam fehlt, sende ich es mit POST an den richtigen Endpunkt. Hat jemand bitte einen Tipp für mich?

Antwort

0

Es sieht so aus, als ob ihre Dokumentation leicht ausfällt. Ich war in der Lage, eine richtige API-Antwort zu erhalten, indem Sie an /backstage/oauth/token (kein schleppendes /) senden. Mit dem abschließenden Schrägstrich versucht es, Sie an eine andere Nicht-API-URL weiterzuleiten.

Außerdem muss das POST-Array über http_build_query() übergeben werden, damit cURL keinen mehrteiligen Form-Post aus dem bereitgestellten Array erstellt. Da es sich um eine API handelt, müssen Sie nichts mit Cookies machen. Ich habe auch ein paar andere unnötige Optionen entfernt.

Hier ist ein Code zum Einstieg, dass für mich gearbeitet:

$post = array(
    "client_id"   => "secret", 
    "client_secret"  => "secret", 
    "grant_type"   => "client_credentials", 
); 

$ch = curl_init(); 

curl_setopt($ch, CURLOPT_COOKIESESSION, 0); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0); 
curl_setopt($ch, CURLOPT_USERAGENT, "App Client"); 
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 60); 
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
     'Content-Type: application/x-www-form-urlencoded', 
     'Accept: application/json', 
)); 

curl_setopt($ch, CURLOPT_URL,"https://backstage.taboola.com/backstage/oauth/token"); 
curl_setopt($ch, CURLOPT_POST,1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($post)); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,true); 
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); 
curl_setopt($ch, CURLOPT_VERBOSE, 0); 
curl_setopt($ch, CURLOPT_HEADER, 0); 
curl_setopt($ch, CURLOPT_AUTOREFERER, 0); 

$result=curl_exec ($ch); 

$info = curl_getinfo($ch); 
$response = json_decode($result, true); 

if ($info['http_code'] == 200) { 
    // okay 
    $access_token = $response['access_token']; 
    var_dump($response); 
} else { 
    // error 
    echo $response['error'] . ': ' . $response['error_description']; 
} 
Verwandte Themen