Установить сессию, чтобы очистить страницу - PullRequest
1 голос
/ 06 января 2012

URL1: https://duapp3.drexel.edu/webtms_du/

URL2: https://duapp3.drexel.edu/webtms_du/Colleges.asp?Term=201125&univ=DREX

URL3: https://duapp3.drexel.edu/webtms_du/Courses.asp?SubjCode=CS&CollCode=E&univ=DREX

Как личный проект по программированию, я хочу почистить каталог курсов моего университетаи предоставить его в качестве RESTful API.

Однако я сталкиваюсь со следующей проблемой.

Страница, которую мне нужно почистить, это URL3.Но URL3 возвращает значимую информацию только после того, как я захожу на URL2 (там он задает термин Colleges.asp?Term=201125), но URL2 можно посещать только после посещения URL1.

Я пытался отслеживать данные HTTP, идущие туда и сюда с помощью FiddlerЯ не думаю, что они используют куки.Закрытие браузера мгновенно сбрасывает все, поэтому я подозреваю, что они используют Session.

Как я могу очистить URL 3?Я попытался программным путем сначала посетить URL-адреса 1 и 2, а затем выполнить file_get_contents(url3), но это не сработало (возможно, потому что он регистрируется как три разных сеанса.

1 Ответ

1 голос
/ 06 января 2012

Сессия также нуждается в механизме идентификации вас. Популярные методы включают в себя: куки, идентификатор сессии в URL.

A curl -v в URL-адресе 1 указывает, что файл cookie сеанса действительно установлен.

Set-Cookie: ASPSESSIONIDASBRRCCS=LKLLPGGDFBGGNFJBKKHMPCDA; path=/

Вам необходимо отправлять этот файл cookie на сервер при любых последующих запросах, чтобы сохранить сеанс в рабочем состоянии.

Если вы хотите использовать file_get_contents, вам нужно вручную создать контекст для него с помощью stream_context_create, чтобы включить файлы cookie в запрос.

Альтернативой (которую я лично предпочел бы) было бы использование curl функций , удобно предоставляемых PHP. (Он может даже позаботиться о трафике файлов cookie для вас!) Но это только мои предпочтения.

Редактировать:

Вот рабочий пример, чтобы очистить путь в вашем вопросе.

$scrape = array(
    "https://duapp3.drexel.edu/webtms_du/",
    "https://duapp3.drexel.edu/webtms_du/Colleges.asp?Term=201125&univ=DREX",
    "https://duapp3.drexel.edu/webtms_du/Courses.asp?SubjCode=CS&CollCode=E&univ=DREX"
);

$data = '';
$ch = curl_init();

// Set cookie jar to temporary file, because, even if we don't need them, 
// it seems curl does not store the cookies anywhere otherwise or include
// them in subsequent requests
curl_setopt($ch, CURLOPT_COOKIEJAR, tempnam(sys_get_temp_dir(), 'curl'));

// We don't want direct output by curl
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

// Then run along the scrape path
foreach ($scrape as $url) {
    curl_setopt($ch, CURLOPT_URL, $url);
    $data = curl_exec($ch);
}

curl_close($ch);

echo $data;
...