2012-01-06 8 views
1

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, и я не думаю, что они используют файлы cookie. Закрытие браузера мгновенно сбрасывает все, поэтому я подозреваю, что они используют Session.

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

+0

Существует сеанс быть установлен с помощью куки: 'ASPSESSIONIDASBRRCCS' является его имя, хотя я не могу понять, почему URL2 надо (может быть, я забыл обратить внимание первый раз) – Grexis

+0

@Grexis : Ах, спасибо за информацию. URL3 предоставляет информацию, например, о том, где будет проходить класс, и кто его возьмет. Это зависит от термина (семестр), который, похоже, устанавливается в URL2 – xbonez

+0

Возможно, стоит упомянуть, что php является одним из немногих динамических языков, на котором нет библиотеки механизации. По этой причине perl python или ruby ​​- лучший выбор для очистки. – pguardiario

ответ

1

Для сеанса необходим механизм для идентификации вас. .: печенье, идентификатор сессии URL

curl -v по URL 1 показывает сеанс печенье действительно быть установлено

Set-Cookie: ASPSESSIONIDASBRRCCS=LKLLPGGDFBGGNFJBKKHMPCDA; path=/ 

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

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

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

Edit:

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

$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; 
+0

Кажется, что «завиток» - намного лучший вариант. Как вы используете 'curl -v'. Скрипач не показал мне печенье, поэтому мне кажется, что «завиток -v» - лучший вариант. Вы используете его из оболочки? – xbonez

+1

Да, 'curl' - это программа оболочки,' -v' просто означает 'verbose', которая отображает заголовки запросов и ответов. Страница Curl man: http://www.manpagez.com/man/1/curl/ –

+0

Отлично. Я могу получить файл cookie и сохранить его в файле. Что касается отправки его в следующий запрос, справочная страница поможет мне в этом. Кстати, как только я получу куки-файл, как долго он действителен?Это зависит от их конфигурации? – xbonez

Смежные вопросы