установка cookie через curl - PullRequest
2 голосов
/ 15 мая 2011

Я пытаюсь установить cookie через cURL в PHP, но это не удается.мой php-код выглядит следующим образом:

$ch=curl_init();
$url="http://localhost/javascript%20cookies/test_cookies.html";
curl_setopt($ch, CURLOPT_COOKIE, 'user=1');
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$contents = curl_exec($ch);
curl_close($ch);
echo $contents;
?>

, файл test_cookies.html содержит javascript, который проверяет наличие cookie и, если он обнаруживает, выводит контент с дополнительным пользовательским контентом.но когда я использую приведенный выше скрипт, он отображает содержимое страницы test_cookies.html, но не с дополнительным пользовательским контентом, что означает, что он не устанавливает cookie.

Я попытался написать другой скрипт, подобный этому

<?php
header("Set-Cookie:user=1");
header("Location:test_cookies.html");
?>

это работает и устанавливает cookie, а также показывает дополнительный пользовательский контент.Я также попытался использовать

curl_setopt($ch,CURLOPT_COOKIEFILE,"cookie.txt");
curl_setopt($ch,CURLOPT_COOKIEJAR,"cookie.txt");

, это записывает информацию о куки-файле в файл, но не читает его при загрузке страницы.кто-нибудь может помочь?

Ответы [ 2 ]

2 голосов
/ 15 мая 2011

Поскольку javascript выполняет проверку в браузере, вы должны установить cookie перед отправкой вывода в браузер.Таким образом, вам нужно объединить оба сценария:

$ch=curl_init();
$url="http://localhost/javascript%20cookies/test_cookies.html";
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$contents = curl_exec($ch);
curl_close($ch);
header("Set-Cookie:user=1");
echo $contents;

Объяснение:
Обратите внимание, что мы рассматриваем две передачи здесь:

  1. данные извлекаются с помощью curl, а затем
  2. оно отправляется в браузер.

Это особый случай, когда вы используете curl для получения контента из localhost, но в реальной жизни вы быиспользуйте curl для получения контента с 3-го хоста.

Если вы получаете различное содержимое в зависимости от того, отправляется ли cookie в запросе или нет, вам следует установить cookie с помощью curl.В большинстве случаев вы можете отправить контент без дополнительной настройки в браузер.Но здесь вы принимаете решение с проверкой на наличие cookie в браузере , поэтому вам не нужна первая настройка cookie, а вам нужна вторая.

1 голос
/ 15 мая 2011

JavaScript не будет работать при получении страницы от curl.

...