网站无法登录REST应用程序

时间:2016-06-27 00:39:23

标签: php rest curl

我正在开发一个Web应用程序。我的主要应用程序是REST应用程序。与传统的Web开发不同,我的网站将我的休息应用程序连接到POST,DELETE,PUT或GET数据。

现在,当我通过名为Postman(https://www.getpostman.com/)的桌面应用程序将我的用户名和密码发布到我的REST应用程序然后获取帐户数据时,它完全正常,我能够检索数据。 / p>

但是当我的网站通过cURL库连接到我的REST应用程序时。它无法获取任何数据,因为网站显示未登录。

我不知道Postman和我的网站为什么表现不同,即使他们从同一个REST应用程序获取数据。

请注意,会话仅在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); 
}

1 个答案:

答案 0 :(得分:0)

Postman发送的内容与您的网站在发出请求时所做的事情之间可能存在差异。我会建议:

  1. 重置所有内容。
  2. POST用户名/通过邮递员传递GET数据。将REST服务从每个请求收到的请求标头和参数记录到日志文件中。
  3. 重置所有内容。
  4. 重复步骤2,但改为从您的网站发出请求。
  5. 比较邮件和邮件发送内容之间的差异的标题和参数。
  6. 为了记录请求标头和参数,请在接收POSTGET请求的PHP脚本顶部调用执行以下代码的函数:

    $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
    

    一旦弄清楚Postman的请求与您网站的请求之间有何不同,您就会发现问题。