Следующие перенаправления HTTP в веб-сканере OCaml - PullRequest
4 голосов
/ 10 января 2011

Что я делаю

Я пишу сканер в OCaml.Используя функцию string_of_uri (ниже), определенную nlucaroni в предыдущем ответе на мой вопрос, я могу получить HTML-текст URL-адреса из Интернета.

let string_of_uri uri = 
try let connection = Curl.init () and write_buff = Buffer.create 1763 in
    Curl.set_writefunction connection
            (fun x -> Buffer.add_string write_buff x; String.length x);
    Curl.set_url connection uri;
    Curl.perform connection;
    Curl.global_cleanup ();
    Buffer.contents write_buff;
with _ -> raise (IO_ERROR uri)

Я уже написал некоторый код для извлечения списка всех гиперссылок в извлеченном HTML (т. Е. Все части [LINK] в любом подобном <A HREF="[LINK]">text</A>).Все это прекрасно работает.

Проблема

Проблема в том, что некоторые страницы перенаправляют вас, и я не знаю, как выполнить перенаправление.Например, моя программа выведет 0 тегов на странице http://en.wikipedia.org, потому что Википедия фактически перенаправит вас на http://en.wikipedia.org/wiki/Main_Page. Если я передам эту последнюю страницу моей программе, все будет работать нормально.Но если я приведу начальный, он просто возвращает 0 <A> тегов.

К сожалению, для ocurl нет документации вообще, кроме имен функций в интерфейсе.Кто-нибудь имеет представление о , как я могу улучшить вышеуказанную функцию string_of_uri, чтобы она следовала любым возможным перенаправлениям и выводила HTML-код последней страницы, в которую она попадает?

Я заметилчто применение функции Curl.get_redirectcount к connection на http://en.wikipedia.org возвращает 0, а это не то, чего я ожидал, поскольку страница перенаправлена ​​на другую страницу ...

Спасибо залюбая помощь!

Всего наилучшего, Surikator.

1 Ответ

0 голосов
/ 05 июля 2011

На этот вопрос уже был дан ответ в комментариях к этому ответу .Решение состоит в том, чтобы добавить Curl.set_followlocation connection true чуть выше Curl.perform connection.

...