我正在开发一个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);
}
答案 0 :(得分:0)
Postman发送的内容与您的网站在发出请求时所做的事情之间可能存在差异。我会建议:
POST
用户名/通过邮递员传递GET
数据。将REST服务从每个请求收到的请求标头和参数记录到日志文件中。为了记录请求标头和参数,请在接收POST
和GET
请求的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的请求与您网站的请求之间有何不同,您就会发现问题。