Как получить фид Reddit, используя PHP cURL?

Я пытаюсь получить фид из моей учетной записи Reddit, используя PHP cURL. В результате мне нужно сохранить свои куки, в настоящее время я пытаюсь сделать это с помощью файла cookies.txt в формате Netscape, но они не применяются к странице. Я думаю, что я должен делать что-то глупое.

Конечный результат Я надеюсь, что страница будет автоматически авторизована в Reddit для меня перед отображением, но я надеюсь узнать, прежде чем перейти к более сложным вещам.

<?php
//format cookies.txt file by adding semi colons to the end of new lines if they aren't already there and removing colons added to #'s
$cookies = file_get_contents('.\cookies.txt');
$cookies = str_replace("\n",";\n",$cookies);
$cookies = str_replace("#;","#",$cookies);
$cookies = str_replace(";;",";",$cookies);
file_put_contents("./cookies.txt", $cookies);

//set user agent and url + initiate
$user_agent = "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36";
$url = 'http://www.reddit.com';
$c = curl_init($url);

//My options
$options = array(
CURLOPT_CUSTOMREQUEST  =>"GET",        //set request type post or get
CURLOPT_POST           =>false,        //set to GET
CURLOPT_USERAGENT      => $user_agent, //set user agent
CURLOPT_COOKIEFILE     =>".\cookies.txt", //set cookie file
CURLOPT_COOKIEJAR      =>".\cookies.txt", //set cookie jar
CURLOPT_RETURNTRANSFER => true,     // return web page
CURLOPT_HEADER         => false,    // don't return headers
CURLOPT_FOLLOWLOCATION => true,     // follow redirects
CURLOPT_ENCODING       => "",       // handle all encodings
CURLOPT_AUTOREFERER    => true,     // set referer on redirect
CURLOPT_CONNECTTIMEOUT => 120,      // timeout on connect
CURLOPT_TIMEOUT        => 120,      // timeout on response
CURLOPT_MAXREDIRS      => 10,       // stop after 10 redirects
);
curl_setopt_array( $c, $options );
//curl_setopt(... other options you want...)

$html = curl_exec($c);

if (curl_error($c))
die(curl_error($c));

// Get the status code
$status = curl_getinfo($c, CURLINFO_HTTP_CODE);

curl_close($c);

//get html
echo $html;
?>

0

Решение

Здесь есть несколько вопросов. Давайте разберемся с ними по одному.

Первый, Вы заявляете, что хотите, чтобы этот скрипт регистрировал вас в Reddit. Предположительно, это PHP-скрипт, доступный через Интернет, и ваша цель — установить куки в вашем браузере, когда вы посещаете эту страницу.

Проблема 1: Это может быть невозможно, если значения файлов cookie зависят от IP-адреса (и, возможно, других факторов), для которых файл cookie был создан. Я не знаком с тем, как Reddit обрабатывает сессии, поэтому я не могу ответить на это. Если значения cookie-файлов могут быть разделены между любыми компьютерами, тогда все готово.

Проблема 2: Вы не отправляете заголовки (включая файлы cookie) в свой браузер, но я подозреваю, что вы просто еще не достигли этой точки. Когда вы доберетесь туда, вы можете сделать это с header() или же setcookie().

второй, Есть некоторые синтаксические проблемы с вашим кодом.

  • Ты используешь \ в качестве разделителя каталогов. Это проблематично, потому что одна обратная косая черта сама по себе является побег персонаж. Хотя символы предшествуют \ не избежали (исключая \n), это не очень хорошая привычка.

  • Все, что сказал, вы должны использовать DIRECTORY_SEPARATOR вместо.

  • Вы смешиваете одинарные кавычки (') и двойные кавычки ("). В PHP это имеет значение. Прочитайте документацию на строки для дополнительной информации.

  • Вы также смешиваете слеш (/) и обратная косая черта (\) для ваших путей к каталогам.

Итак, теперь нам нужно определить несколько вещей, и это поможет нам отладить, если вы предоставите свой файл cookie. Зашифруйте значения, чтобы мы не смогли захватить ваш сеанс.

  • Что на самом деле возвращается в curl?

  • Что выводится в ваш браузер?

  • Когда были созданы значения cookie? Возможно, срок действия файла cookie истек.

2

Другие решения

cURL может самостоятельно обрабатывать создание и обработку файла cookie. Я бы порекомендовал исключить код, который вы написали до //set user agent and url + initiate, Следующим шагом является обеспечение того, чтобы cookies.txt существует, и пользователь, выполняющий ваш сценарий, имеет соответствующие разрешения для доступа к файлу (760, 770 или 660 должны быть тем, что вам нужно, если вы запускаете это в Linux).

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector