У меня остроумие с этой проблемой.
Я пытаюсь использовать PHP и CURL для входа на веб-сайт, получения куки-файлов с этого веб-сайта, а затем использовать куки для POST на поисковом веб-сайте.
Если я использую Postman,Кажется, что он работает нормально, и куки остаются для этого сеанса.Я могу сделать поиск и получить результаты.
Однако, если я попытаюсь сделать это с помощью PHP-кода через CURL, поисковый скрипт попытается выйти из меня, несмотря на передачу файла cookie.
Вот мой код:
<code><?php
$cookieArray = login2();
foreach ($cookieArray as $key => $value) {
$sessid = $key;
$sessvalue = $value;
}
$cookieSet = $sessid.'='.$sessvalue;
$result = search_name ($name_last, $name_first, $start_dt, $end_dt, $userid, $cookieSet);
echo "<pre>"; print_r($result); echo "
"; // войти в систему и вернуть cookie cookie login2 () {// установить поля сообщения $ post = ['login_id' => 'xxxxx', 'pw '=>' xxxxx ',]; $ ch = curl_init ('
https://xxx.xxx.org/login.asp'); curl_setopt ($ ch, CURLOPT_RETURNTRANSFER, true); curl_setopt ($ ch, CURLOPT_POSTFIELDS, $ post); curl_setopt ($ ch, CURLOP),curl_setopt ($ ch, CURLOPT_FOLLOWLOCATION, 0); // выполнить! // $ response = curl_exec ($ ch); if (! curl_exec ($ ch)) {die ('Ошибка: "'. curl_error ($ ch). '"- Код: '. Curl_errno ($ ch));} else {$ response = curl_exec ($ ch);} // закрыть соединение, освободить используемые ресурсы curl_close ($ ch); // Затем после вызова curl_exec:$ header_size = curl_getinfo ($ ch, CURLINFO_HEADER_SIZE); $ header = substr ($ response, 0, $ header_size); $ body = substr ($ response, $ header_size); // получить cookie // вариант нескольких файлов cookie, предоставленный @Combuster в комментариях preg_match_all ('/ ^ Set-Cookie: \ s * ([^;] *) / mi', $ response, $ совпадений); $ cookies = array (); foreach ($ совпадений [1] как $ item) {parse_str ($ item, $ cookie));$ cookies = array_merge ($ cookies, $ cookie);} echo "
"; print_r($cookies); echo "
";$ cookieArr = [];foreach ($ cookie как $ key => $ value) {$ cookieArr [$ key] = $ value;} return $ cookieArr;} // просмотр функции search_name ($ name_last, $ name_first = NULL, $ start_dt, $ end_dt, $ userid, $ cookiesIn) {// установка полей сообщения $ poststring = 'name_last = Smith & date_start = 01/01/2019 & date_stop = 03/08/ 2019 & ref_md = 53557' ;$ url = '
https://xxx.xxx.org/frm_search_idx.asp'; $ ch = curl_init ($ url);$ headers = array ("Accept: Content-Type: application / x-www-form-urlencoded", "Content-Type: application / x-www-form-urlencoded", "Cache-Control: no-cache", "Подключение: Keep-Alive ");//, $ options = array (CURLOPT_RETURNTRANSFER => true, // вернуть веб-страницу CURLOPT_HEADER => true, // вернуть заголовки в дополнение к содержимому CURLOPT_POST => true, CURLOPT_POSTFIELDS => json_encode ($ poststring), $ CURLOPTHT> H>, CURLOPT_VERBOSE => true, CURLOPT_FOLLOWLOCATION => false, // следовать за перенаправлениями CURLOPT_ENCODING => "", // обрабатывать все кодировки CURLOPT_AUTOREFERER => true, // установить реферер для перенаправления CURLOPT_CONNECTTIMEOUT =>>>>>>>>>120, // время ожидания ответа CURLOPT_MAXREDIRS => 10, // остановка после 10 перенаправлений CURLINFO_HEADER_OUT => истина, CURLOPT_SSL_VERIFYPEER => ложь, // проверка SSL-сертификатов CURLOPT_HTTP_VERSION => CURL_HTOP_1> $> $> $> _CUR__1_C__T_K_T_T_V_C__TF_V__C__TF_V_C_T_C__C_C_T_K_C_C_C_C_C_C_C_C_C_C_C_C_C_C_C_C_C_C_C_C_C_C_C_C_C_C_C_C_C_C_C_C_C_C_C_C_C_C_C_S_S_S_P_C_PBcurl_setopt_array ($ ch, $ options);// выполнить!if (! curl_exec ($ ch)) {die ('Ошибка: "'. curl_error ($ ch). '" - код:'. curl_errno ($ ch));} else {$ rough_content = curl_exec ($ ch);// $ response = curl_exec ($ ch);} $ err = curl_errno ($ ch);$ errmsg = curl_error ($ ch);$ header = curl_getinfo ($ ch);curl_close ($ ch);$ header_content = substr ($ rough_content, 0, $ header ['header_size']);$ body_content = trim (str_replace ($ header_content, '', $ rough_content));$ pattern = "# Set-Cookie: \\ s + (? [^ =] + = [^;] +) # m";
preg_match_all ($ pattern, $ header_content, $ match);
$ cookiesOut = implode (";", $ соответствует ['cookie']);
$ header ['errno'] = $ err;
$ header ['errmsg'] = $ errmsg;
$ header ['headers'] = $ header_content;
$ header ['content'] = $ body_content;
$ header ['cookies'] = $ cookiesOut;
вернуть заголовок $;
}
Вот ответ, который я получаю:
Array
(
[ASPSESSIONIDCURAQRDR] => HEKLBNEDNKGONMIAJPKHPLGN
)
Sess id:ASPSESSIONIDCURAQRDR
Sess value:HEKLBNEDNKGONMIAJPKHPLGN
Cookie
Array
(
[ASPSESSIONIDCURAQRDR] => HEKLBNEDNKGONMIAJPKHPLGN
)
Array
(
[url] => https://xxx.xxx.org/frm_search_idx.asp
[content_type] => text/html
[http_code] => 302
[header_size] => 266
[request_size] => 410
[filetime] => -1
[ssl_verify_result] => 0
[redirect_count] => 0
[total_time] => 0.031
[namelookup_time] => 0
[connect_time] => 0
[pretransfer_time] => 0.016
[size_upload] => 78
[size_download] => 130
[speed_download] => 4193
[speed_upload] => 2516
[download_content_length] => 130
[upload_content_length] => 78
[starttransfer_time] => 0.031
[redirect_time] => 0
[certinfo] => Array
(
)
[primary_ip] => 00.00.00.000
[primary_port] => 443
[local_ip] => **.**.**.**
[local_port] => 17711
[redirect_url] => https://xxx.xxx.org/login.asp
[request_header] => POST /frm_search_idx.asp HTTP/1.1
Host: xxx.xxx.org
Accept-Encoding: deflate, gzip
Cookie: ASPSESSIONIDCURAQRDR=HEKLBNEDNKGONMIAJPKHPLGN
Accept: Content-Type: application/x-www-form-urlencoded
Content-Type: application/x-www-form-urlencoded
Cache-Control: no-cache
Connection: Keep-Alive
Content-Length: 78
[errno] => 0
[errmsg] =>
[headers] => HTTP/1.1 302 Object moved
Cache-Control: no-cache
Pragma: no-cache
Content-Length: 130
Content-Type: text/html
Expires: Mon, 11 Mar 2019 18:26:09 GMT
Location: login.asp
Server: Microsoft-IIS/7.0
X-Powered-By: ASP.NET
Date: Mon, 11 Mar 2019 18:27:08 GMT
[content] =>
Object Moved
This object may be found here.
[cookies] =>
)
Любая помощь приветствуется.
Заранее спасибо,
George