Как разделить соединение PHP cURL на файлы? - PullRequest
1 голос
/ 20 марта 2020

Я создаю простой PHP скрипт для входа на веб-страницу и получения некоторых данных на второй странице. На данный момент я использовал один php файл с двумя отдельными соединениями curl, используя тот же повар ie Первое соединение curl выполнило вход в систему, второе получило данные.

Теперь я хочу разделить эти две части на два отдельных файла php, чтобы вызывать каждый независимый через Ajax.

Вход в систему успешен, но получение данных не работает, кажется, из-за отсутствия cook ie.

Я не совсем уверен, возможно ли заставить его работать таким образом, и что лучше потренируйтесь, чтобы понять, что я пытаюсь, может быть, кто-то сможет украсить мои мысли.

        // SET CONSTANTS
        define('COOKIE_NAME', 'c.txt');
        define('url_login', 'https://website.com/login.cgi');
        $postString = 'user='.$user.'&passwd='.$passwd.'&otp='.$otp;

        // CREATE CURL CONNECTION FOR LOGIN
        $curl_connection = curl_init(url_login);

        curl_setopt($curl_connection, CURLOPT_CONNECTTIMEOUT, 30);
        curl_setopt($curl_connection, CURLOPT_USERAGENT, 
        "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)");
        curl_setopt($curl_connection, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($curl_connection, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($curl_connection, CURLOPT_FOLLOWLOCATION, 1);

        curl_setopt($curl_connection, CURLOPT_HEADER, false);
        curl_setopt($curl_connection, CURLOPT_COOKIEJAR, COOKIE_NAME);
        curl_setopt($curl_connection, CURLOPT_COOKIEFILE, COOKIE_NAME);

        curl_setopt($curl_connection, CURLOPT_POSTFIELDS, $postString);
        $loginpage = curl_exec($curl_connection);



        // CREATE CURL CONNECTION TO GET DATA

        $data_url = 'https://website.com/getData.cgi';

        $curl_connection = curl_init($data_url);

        curl_setopt($curl_connection, CURLOPT_CONNECTTIMEOUT, 30);
        curl_setopt($curl_connection, CURLOPT_USERAGENT, 
        "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)");
        curl_setopt($curl_connection, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($curl_connection, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($curl_connection, CURLOPT_FOLLOWLOCATION, 1);

        curl_setopt($curl_connection, CURLOPT_HEADER, false);
        curl_setopt($curl_connection, CURLOPT_COOKIEJAR, COOKIE_NAME);
        curl_setopt($curl_connection, CURLOPT_COOKIEFILE, COOKIE_NAME);


        $data = curl_exec($curl_connection);

Вот как это работает ...

Как только я разделю скручиваемые соединения на отдельные php файлов, вторая часть не работает, выдавая этот вывод:

HTTP / 1.1 200 OK Сервер: nginx Дата: Пт, 20 марта 2020 12:49:12 GMT Тип контента: text / html Content-Length: 85 Соединение: закрыть Cache-Control: нет кеша, нет хранилища, необходимо повторная проверка Pragma: no-cache Истекает: 0 Set-Cook ie: ws-sid-10-147 -g1e32 = Отменено; Путь = /; max-age = 0 Strict-Transport-Security: max-age = 63072000; IncludeSubdomains; предварительная загрузка X-Frame-Options: DENY X-Content-Type-Options: nosniff X-XSS-Protection: 1; режим = блок не готовить ie найдено

1 Ответ

0 голосов
/ 22 марта 2020

Я думаю, что нашел решение, по крайней мере, оно работает.

В первом соединении cURL я считал Cook ie из заголовка, а во втором я добавил Cook ie вручную с опция CURLOPT_COOK IE:

Первое PHP подключение файла и cUrl:

curl_setopt($curl_connection, CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt($curl_connection, CURLOPT_USERAGENT, 
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)");
curl_setopt($curl_connection, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl_connection, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl_connection, CURLOPT_FOLLOWLOCATION, 1);

curl_setopt($curl_connection, CURLOPT_HEADER, true);
curl_setopt($curl_connection, CURLOPT_COOKIEJAR, COOKIE_NAME);
curl_setopt($curl_connection, CURLOPT_COOKIEFILE, COOKIE_NAME);

curl_setopt($curl_connection, CURLOPT_POSTFIELDS, $postString);
$page = curl_exec($curl_connection);

preg_match("/Set-Cookie: (.{18,20})\=(.{32});/", $page, $cookie);

$cookie = $cookie[2];

Во втором подключении файла и cURL:

$curl_connection = curl_init($url);

curl_setopt($curl_connection, CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt($curl_connection, CURLOPT_USERAGENT, 
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)");
curl_setopt($curl_connection, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl_connection, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl_connection, CURLOPT_FOLLOWLOCATION, 1);

curl_setopt($curl_connection, CURLOPT_HEADER, true);

curl_setopt($curl_connection, CURLOPT_COOKIE, $cookie);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...