PHP可以存储Cookie并使用这些cookie发送curl请求吗?

时间:2017-05-02 12:04:42

标签: php curl cookies

我们在2个不同的服务器上运行2个应用程序, 假设 SERVER_X (PHP)和 SERVER_Y (NODE)。

SERVER_X index.php

$url = 'http://10.10.10.2/login';
$poststring = 'username=admin&password=password';
$ch = curl_init ($url);
curl_setopt ($ch, CURLOPT_COOKIEJAR, $ckfile);
curl_setopt ($ch, CURLOPT_COOKIEFILE, $ckfile);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt ($ch, CURLOPT_POST, 1);
curl_setopt ($ch, CURLOPT_POSTFIELDS, $poststring);
$output = curl_exec ($ch);
curl_close($ch);


$url = 'http://10.10.10.2/getdata';
$ch = curl_init ($url);
curl_setopt($ch, CURLOPT_COOKIEFILE, $ckfile);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt ($ch, CURLOPT_POST, 1);
$output = curl_exec ($ch);
curl_close($ch);
echo json_decode($output);

enter image description here 所以我们想要实现的是访问SERVER_X / index.php, CLIENT 能够从 SERVER_Y 获取数据,其中 SERVER_Y 的身份验证在 SERVER_X PHP代码中完成。这可能吗?

1 个答案:

答案 0 :(得分:-1)

管理以使其与下面的代码一起使用,

 define('_IP', '10.10.10.2');
define('_USERNAME', $_GET['user']);
define('_PASSWORD', $_GET['pass']);
define('_ORCHESTRA_PORT', '11111');
define('_NODE_PORT', '22222');

$main_auth_url = 'http://' . _IP . ':' . _ORCHESTRA_PORT . '/v2/auth/login';
$main_auth_credential = array("username" => _USERNAME, "password" => _PASSWORD);
$main_auth_credential = json_encode($main_auth_credential);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $main_auth_url);
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, $main_auth_credential);
curl_setopt($ch, CURLOPT_HEADER, TRUE);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
curl_setopt($ch, CURLOPT_VERBOSE, true);

$response = curl_exec($ch);
curl_close($ch);

$user_id = explode('set-cookie: userid=', $response);
$user_id = explode('; Max-Age', $user_id[1]);
$user_id = $user_id[0];

$token = explode('set-cookie: token=', $response);
$token = explode('; Max-Age', $token[1]);
$token = $token[0];

$connect_sid = explode('set-cookie: connect.sid=', $response);
$connect_sid = explode('; Path=/', $connect_sid[1]);
$connect_sid = $connect_sid[0];

$node_user_id = urldecode($user_id);
$node_user_id = explode('"', $node_user_id);
$node_user_id = $node_user_id[1];

$node_auth_url = 'http://' . _IP . ':' . _NODE_PORT . '/v2/auth/login';
$node_auth_credential = array("username" => $node_user_id, "password" => $token);
$node_auth_credential = json_encode($node_auth_credential);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $node_auth_url);
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, $node_auth_credential);
curl_setopt($ch, CURLOPT_HEADER, TRUE);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);

$response = curl_exec($ch);
$info = curl_getinfo($ch);
curl_close($ch);

$connect_sid = explode('set-cookie: connect.sid=', $response);
$connect_sid = explode('; Path=/', $connect_sid[1]);
$connect_sid = $connect_sid[0];

$sub_url = 'http://' . _IP . ':' . _NODE_PORT . '/getdata';

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $sub_url);
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Cookie: userid=" . $user_id . "; token=" . $token . "; connect.sid=" . $connect_sid));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_VERBOSE, true);

$response = curl_exec($ch);
curl_close($ch);

echo '<pre>';
print_r($response);
echo '</pre><hr>';