2016-06-27 5 views
0

私はWebアプリケーションを開発中です。私の主なアプリケーションはRESTアプリケーションです。従来のウェブ開発とは異なり、私のウェブサイトはPOSTアプリケーション、DELETEアプリケーション、PUTアプリケーション、GETデータに接続します。ウェブサイトがRESTアプリケーションにログインできない

Postman(https://www.getpostman.com/)と呼ばれるデスクトップアプリケーションを通じて自分のユーザー名とパスワードをRESTアプリケーションにPOSTしてから、アカウントデータを取得すると、正常に動作し、データを取得できます。

私のウェブサイトがcURLライブラリを使用してRESTアプリに接続するとき。

なぜ、同じRESTアプリケーションからデータを取得しているにもかかわらず、Postmanと私のWebサイトが異なる動作をする理由がわかりません。

セッションはRESTアプリケーションのみであるため、私のウェブサイトはネイティブセッションを使用しません。ここで

は私のウェブサイトの私の関数です:

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

ようこそ。あなたが質問をして助けを受けるときには、離れるだけで済ませないか、将来的に助けを得ることができなくなります。これらの回答は、テストと書き込みに長い時間がかかります。私の答えが役に立つなら、それを選んでください。役に立たない場合は、不明な点、間違った点、欠けている点についてのフィードバックを残してください。 – BeetleJuice

答えて

0

送信して、要求時にあなたのウェブサイトは何を何ポストマンの間で差がありそうです。私が提案するもの:

  1. すべてをリセットします。
  2. POSTユーザー名/パスをGETとします。 RESTサービスが各要求から受け取った要求ヘッダーとパラメーターをログ・ファイルに記録します。
  3. すべてをリセットします。
  4. 手順2を繰り返しますが、代わりにお客様のウェブサイトからリクエストしてください。
  5. 郵便配達員とあなたのウェブサイトが送信したものとの間の差異に関するヘッダーとパラメータを比較します。あなたが把握したら

    $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 
    

    :呼び出し、POSTGET要求を受け取るPHPスクリプトの先頭に以下のコードを実行機能をリクエストヘッダとパラメータを記録するために

郵便配達員のリクエストとあなたのウェブサイトのリクエストとの違いは、問題を見つけることになります。

関連する問題