Используйте куки, сохраненные curl в stream_get_contents - PullRequest
0 голосов
/ 07 ноября 2018

Я хотел отправить POST-запрос. На самом деле curl на 100 мс медленнее, чем stream_get_contents, поэтому я хотел использовать последний.

У меня есть cookie.txt, сохраненный curl, как мне использовать его в моей функции stream_get_contents ниже.

function poster($url, $data, $optional_headers = null)
{
  $params = array('http' => array(
              'method' => 'POST',
              'content' => $data
            ));
  if ($optional_headers !== null) {
    $params['http']['header'] = $optional_headers;
  }
  $ctx = stream_context_create($params);
  $fp = @fopen($url, 'rb', false, $ctx);
  if (!$fp) {
    throw new Exception("Problem with $url, $php_errormsg");
  }
  $response = @stream_get_contents($fp);
  if ($response === false) {
    throw new Exception("Problem reading data from $url, $php_errormsg");
  }
return $response;
}

Мой cookie.txt, хранящийся в curl, выглядит следующим образом

secure.domain.com   FALSE   /   FALSE   0   InterSecure AyDzUp5AEKz0ErJYeJF2221lIA$$
#HttpOnly_secure.domain.com FALSE   /   TRUE    0   ASP.NET_SessionId   eqyrgo545czouimlnqc223f0qyi

Я пробовал что-то вроде

 $header = array(
    'Referer: https://secure.domain.com/IDirectTrading/customer/login.aspx',
    'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.20 Safari/537.36',
    'Cookie :   InterSecure = AyDzUp5AEKz0ErJYeJF2221lIA$$;ASP.NET_SessionId = eqyrgo545czouimlnqc223f0qyi'
 );
$CE = poster("https://secure.domain.com/Handler.ashx",$str,$header);

Но cookie, похоже, не работает. Есть ли способ проанализировать текстовый файл cookie в массив и использовать его в заголовке?

1 Ответ

0 голосов
/ 07 ноября 2018

Согласно RFC 6265 :

Сериализация списка cookie в строку cookie путем обработки каждого cookie в списке файлов cookie в порядке:

  1. Выведите имя куки, символ% x3D ("=") и значение куки.

  2. Если в списке файлов cookie есть необработанный файл cookie, выведите символы% x3B и% x20 (";").

Другими словами, не должно быть пробелов вокруг знака равенства, и каждый cookie должен быть разделен точкой с запятой и пробелом:

$header = [
    'Cookie: InterSecure=AyDzUp5AEKz0ErJYeJF2221lIA$$; ASP.NET_SessionId=eqyrgo545czouimlnqc223f0qyi',
];
...