CURLOPT_COOKIEFILE не добавляет заголовок Cookie - PullRequest
0 голосов
/ 14 февраля 2012

Я использую MAMP на Mac под управлением OS X Lion.

Мне нужно подключиться к удаленному сайту, отправляющему cookie.Все идет хорошо, за исключением части печенья.Для части cookie я использую этот код:

$cookieFile = dirname(__FILE__).'/cookie.txt';
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookieFile); 
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookieFile); 

Часть CURLOPT_COOKIEJAR действительно создает cookie, но при последующем запросе CURLOPT_COOKIEFILE не добавляет заголовок cookie.Я проверил это, используя HTTPScoop (инструмент, похожий на Fiddler).

Есть идеи, в чем может быть проблема?

РЕДАКТИРОВАТЬ: Я подключаюсь к сайту ASP.Net.Кажется, проблема в том, что я не получаю файл cookie ASP.NET_SessionId.Файл cookie, который я получаю, имеет ключ без значения, что, вероятно, является причиной, по которой он не публикуется.Есть идеи, как заставить сервер отправлять сессионный cookie?

1 Ответ

1 голос
/ 14 февраля 2012

Нам действительно нужно увидеть больше кода, но у меня есть пример бита, который собирает сессионный cookie из первоначального запроса, а затем использует его в последующем POST. Он использует анонимный прокси-сервер для запуска запроса GET по произвольному URL-адресу, надеюсь, он поможет вам (чтобы было ясно, хотя он и не использует COOKIEJAR, но я чувствую, что он все еще может быть полезен).

<?php
define('TARGET_URL', 'http://moxune.com');
echo 'Sending initial request' . PHP_EOL;
$aHeaders = get_headers("http://420proxy.info");

foreach($aHeaders as $sHeader) {
    if(stripos($sHeader, 'set-cookie') !== false) {
        // extract the cookie from the first response
        $aCookie = explode(':', $sHeader);
        $sCookie = trim(array_pop($aCookie));
        $oCookie = http_parse_cookie($sCookie);

        echo 'Cookie extracted, trying to POST now' . PHP_EOL;

        // OK, now let's try the POST request
        $ch = curl_init('http://420proxy.info/includes/process.php?action=update');
        curl_setopt($ch, CURLOPT_REFERER, '420.proxy.info');
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_COOKIE, $sCookie);
        curl_setopt($ch, CURLOPT_HEADER, true);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);

        curl_setopt($ch, CURLINFO_HEADER_OUT, true);
        curl_setopt($ch, CURLOPT_HTTPHEADER, array('Expect: 100-continue'));

        //curl_setopt($ch, CURLOPT_COOKIE, http_build_cookie((array)$oCookie));
        curl_setopt($ch, CURLOPT_POSTFIELDS, array(
            'u' => TARGET_URL,
            'allowCookies' => 'off',
            'encodeURL' => 'off',
            'stripJS' => 'on'
            )   
        );  

        $response = curl_exec($ch);

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