2016-06-27 7 views
0

Ich entwickle eine Webanwendung. Meine Hauptanwendung ist eine REST-Anwendung. Anders als bei der herkömmlichen Web-Entwicklung, verbindet sich meine Website mit meiner Rest-Anwendung zu POST-, DELETE-, PUT- oder GET-Daten.Webseite kann sich nicht in die REST-Anwendung einloggen

Jetzt, wenn ich meinen Benutzernamen und Passwort zu meiner REST-Anwendung über eine Desktop-Anwendung namens Postman() und dann die Kontodaten abrufen, funktioniert es einwandfrei und ich bin in der Lage, die Daten abzurufen.

Aber wenn meine Website eine Verbindung zu meiner REST-App durch cURL-Bibliothek herstellt. Es ist nicht in der Lage, irgendwelche Daten zu erhalten, weil die Website nicht angemeldet ist.

Ich weiß nicht, warum Postman und meine Website sich anders verhalten, obwohl sie Daten aus derselben REST-Anwendung erhalten.

Beachten Sie, dass die Sitzungen nur in der REST-Anwendung ausgeführt werden. Daher verwendet meine Website keine systemeigenen Sitzungen.

Hier sind meine Funktionen in meiner Website:

function process_api_get($base_url,$extension) 
{ 
    $curl = curl_init(); 
curl_setopt_array($curl, array(
    CURLOPT_RETURNTRANSFER => 1, 
    CURLOPT_URL => $base_url . $extension, 
     CURLOPT_CUSTOMREQUEST => 'GET' 
)); 

$resp = curl_exec($curl); 
curl_close($curl); 

// echo '<pre>'; 
// print_r($resp); 
// exit; 

return json_decode($resp); 
} 
function process_api_post($input,$base_url,$extension) 
{ 
    $obj = json_encode($input); 
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST"); 
    curl_setopt($ch, CURLOPT_POSTFIELDS, $obj);  
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 

    curl_setopt($ch, CURLOPT_COOKIESESSION, true); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_HEADER, 0); 
    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; rv:11.0) Gecko/20100101 Firefox/11.0'); 

    curl_setopt($ch, CURLOPT_URL, $base_url . $extension); 
//  
    if (isset($_COOKIE[session_name()])) 
     curl_setopt($ch, CURLOPT_COOKIE, session_name().'='.$_COOKIE[session_name()].'; path=/'); 

    session_write_close(); 

    $result = curl_exec($ch); 


    curl_close($ch); 

    return json_decode($result); 
} 

function process_api_put($input,$base_url,$extension) 
{ 

    $obj = json_encode($input); 
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT"); 
    curl_setopt($ch, CURLOPT_POSTFIELDS, $obj);  
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
    curl_setopt($ch, CURLOPT_COOKIESESSION, true); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_HEADER, 0); 
    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; rv:11.0) Gecko/20100101 Firefox/11.0'); 
    curl_setopt($ch, CURLOPT_URL, $base_url . $extension); 
    if (isset($_COOKIE[session_name()])) 
     curl_setopt($ch, CURLOPT_COOKIE, session_name().'='.$_COOKIE[session_name()].'; path=/'); 

    session_write_close(); 
    $result = curl_exec($ch); 
    curl_close($ch); 
    session_start(); 
    return json_decode($result); 

} 
function process_api_delete($input,$base_url,$extension) 
{ 
    $obj = json_encode($input); 
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "DELETE"); 
    curl_setopt($ch, CURLOPT_POSTFIELDS, $obj);  
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($ch, CURLOPT_URL, $base_url . $extension); 
    $result = curl_exec($ch); 
    curl_close($ch); 
    return json_decode($result); 
} 
+0

Willkommen auf der Website. Wenn du eine Frage stellst und Hilfe bekommst, geh nicht einfach weg oder es wird dich daran hindern, Hilfe in der Zukunft zu bekommen. Diese Antworten benötigen viel Zeit zum Testen und Schreiben. Wenn meine Antwort hilfreich ist, wählen Sie sie aus (Upvote, wenn Sie möchten). Wenn es nicht hilfreich ist, hinterlassen Sie ein Feedback darüber, was unklar, falsch oder fehlend ist. – BeetleJuice

Antwort

0

Es gibt wahrscheinlich einen Unterschied zwischen dem, was Postman sendet und was Ihre Website tut, wenn die Anfrage zu machen. Was ich vorschlagen würde:

  1. Alles zurücksetzen.
  2. POST Benutzername/Pass dann GET Daten mit Postman. Notieren Sie die Anforderungsheader und Parameter, die der REST-Service von jeder Anforderung erhalten hat, in einer Protokolldatei.
  3. Alles zurücksetzen.
  4. Wiederholen Sie Schritt 2, aber machen Sie stattdessen Anfragen von Ihrer Website.
  5. Vergleichen Sie die Header und Parameter für Diskrepanzen zwischen dem, was Postman und was Ihre Website gesendet hat.

Um Request-Header und Parameter zu erfassen, rufen Sie eine Funktion, die den Code unten an der Spitze des PHP-Skripte, die die POST und die GET Anfrage erhalten ausführt:

$filepath = 'path/to/request_logs.txt'; //save loction 
$file_contents = 
"=========== ".strftime("%m-%d-%Y %H:%M:%S")." ============".PHP_EOL 
        ."Request Headers: ".PHP_EOL 
        .print_r(http_get_request_headers(),true) 
        .PHP_EOL.PHP_EOL 
        ."Request Parameters: ".PHP_EOL 
        .print_r($_REQUEST,true) 
        .PHP_EOL.PHP_EOL; 
file_put_contents($filepath,$file_contents,FILE_APPEND); //log the request 

Sobald Sie heraus Was sich zwischen den Anfragen von Postman und den Anfragen Ihrer Website unterscheidet, werden Sie das Problem finden.

Verwandte Themen