PHP Curl сбрасывает куки и не сохраняет их в cookie Jar - PullRequest
1 голос
/ 13 июня 2019

Curl не сохраняет куки в файле jar cookie, как это обычно делается при использовании cookiejar,

Я нахожусь в Windows и использую абсолютный путь, iis может сгенерировать файл, чтобы егоне права доступа к файлам или папкам

Чтобы попытаться выяснить причину, по которой я включил и напечатал подробное изгибание в файле, я заметил следующее сообщение, которое привлекло мое внимание

* cookie 'cookienamehere' dropped, domain 'domainname' must not set cookies for 'domainname'

Iмного раз искал в гугле и здесь подобное сообщение, но не повезло, никто не упоминает об этом нигде

Файл cookie успешно генерируется при выполнении кода ниже, но имеет только следующее содержание

# Netscape HTTP Cookie File
# https://curl.haxx.se/docs/http-cookies.html
# This file was generated by libcurl! Edit at your own risk.

Там нет ни одного куки, сохраненного внутри, но если вы посмотрите на все подробности curl, вы можете заметить, что я на самом деле получаю куки с сервера, но Curl не сохраняет куки в файл, делая егоя не могу использовать куки, чтобы убедиться, что я аутентифицирован на сервере.

Вот полный текст из curl

* upload completely sent off: 116 out of 116 bytes
< HTTP/1.1 200 OK
< Cache-Control: no-cache
< Pragma: no-cache
< Content-Type: application/json; charset=utf-8
< Expires: -1
< Server: Microsoft-IIS/10.0
< X-AspNet-Version: 4.0.30319
* cookie 'ASP.NET_SessionId' dropped, domain 'bluepc' must not set cookies for 'bluepc'
< Set-Cookie: ASP.NET_SessionId=mdwxuw2comshi4x55ukbpinx; path=/; HttpOnly
* cookie '.eti_ASPXAUTH' dropped, domain 'bluepc' must not set cookies for 'bluepc'
< Set-Cookie: .eti_ASPXAUTH=3C58F15EE0B8CCFAB5D1C8C6C1D24EFB3A6EBDA01C783E48713639B95621467C625E0AFA85D4F851CECDF842B6C306849E3A183091582A1AD6972F47DC6C1A03A4C638D98ECB32CBB3A7FBB1E4D8C2E8CC5862F23DC5E9771EED39F88C8B8FE29B85227F47C3568ED0EF54408EC56F334A23A581A00DE646796CE2A8E8BFCBC106936AC7EAC779B0D433AAB5A2DF8C92; path=/; HttpOnly
* cookie 'eti_sessionInfo' dropped, domain 'bluepc' must not set cookies for 'bluepc'
< Set-Cookie: eti_sessionInfo=YgBsAHUAZQBwAGMAXABzAHEAbAAyADAAMQA3AKcAUwBpAHMAdABlAG0AYQBfAGUAbQBwAHIAZQBzAGEAcwCnAGgAZQBsAGQAZQCnAEUAeAAgADIAMAAxADkApwAxAKcAUABUAC0AUABUAA==; path=/
< X-Powered-By: ASP.NET
< Date: Thu, 13 Jun 2019 15:01:51 GMT
< Content-Length: 131327
< 
* Connection #0 to host bluepc left intact

Ниже приведен php-код, который я использую для подключения, создания файла и выгрузки подробного файла и выгрузки переменных с сервера

<?php 

$url = 'http://bluepc/ERPV18/api/Shell/LoginUser/';
//Initiate cURL.
$ch = curl_init($url);
//The JSON data.
$jsonData = array(
    'login' =>  'user',
    'password' =>  'pass',
    'idioma' =>  'pt-pt',
    'server' =>  'bluepc\\sql2017',
    'sistema' =>  'Sistema_empresas'
);

//Encode the array into JSON.
$jsonDataEncoded = json_encode($jsonData);


 $fp = fopen('c:/cookies/errorlog.txt', 'w');

curl_setopt($ch, CURLOPT_COOKIEFILE, "C:\cookies\cookieFileTeste.txt");
 curl_setopt($ch, CURLOPT_COOKIESESSION, 1);

//Tell cURL that we want to send a POST request.
curl_setopt($ch, CURLOPT_POST, 1);
//curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

//Attach our encoded JSON string to the POST fields.
curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonDataEncoded);

curl_setopt( CURLOPT_COOKIE, "name=daniel; present=yes;");
//Set the content type to application/json
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json')); 

//curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_VERBOSE, true);
   curl_setopt($ch, CURLOPT_STDERR, $fp);

curl_setopt($ch, CURLOPT_COOKIEJAR, "C:/cookies/cookieFileTeste.txt");



//Execute the request
$data=curl_exec($ch);


   $version = curl_version();

   var_dump($version);

if ($data) {
var_dump($data);

}else
{
    echo "Não foi possível abrir o Sistema no Serviço Eticadata";
}
curl_close($ch);

 ?>

Вот результат htmlна странице со всеми var_dump

array(9) { ["version_number"]=> int(475136) ["age"]=> int(4) ["features"]=> int(2428829) ["ssl_version_number"]=> int(0) ["version"]=> string(6) "7.64.0" ["host"]=> string(15) "x86_64-pc-win32" ["ssl_version"]=> string(14) "OpenSSL/1.1.1b" ["libz_version"]=> string(6) "1.2.11" ["protocols"]=> array(22) { [0]=> string(4) "dict" [1]=> string(4) "file" [2]=> string(3) "ftp" [3]=> string(4) "ftps" [4]=> string(6) "gopher" [5]=> string(4) "http" [6]=> string(5) "https" [7]=> string(4) "imap" [8]=> string(5) "imaps" [9]=> string(4) "ldap" [10]=> string(5) "ldaps" [11]=> string(4) "pop3" [12]=> string(5) "pop3s" [13]=> string(4) "rtsp" [14]=> string(3) "scp" [15]=> string(4) "sftp" [16]=> string(3) "smb" [17]=> string(4) "smbs" [18]=> string(4) "smtp" [19]=> string(5) "smtps" [20]=> string(6) "telnet" [21]=> string(4) "tftp" } } 

string(131327) "{DATA VARDUMP HERE, ITS TO LONG AND USELESS TO WRITE HERE ITS THE SUCCESS RESPONSE FROM THE SERVER, SAYING THAT I CONNECTED WITH SUCCESS ETC ETC...}" 

1 Ответ

1 голос
/ 14 июня 2019

Как представляется, это ошибка CURL.

В этом значении "features" не установлен бит PSL (1 << 20), что означает, что эта версия curl страдает от ошибки разбора cookie, присутствующей в 7.64.0, исправлено в 7.64.1 (commit 299d9660f85), из-за которого curl не принимал куки на доменные имена без каких-либо точек.(Я обращаюсь к серверу локально по его имени, поэтому на нем нет точек) </p>

Решение: обновить (или понизить) curl.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...