2014-12-28 3 views
1

Я использую libcurl для получения http-страниц, и я застрял в проблеме. страница Я пытаюсь получить это: http://newsnow.in/news/tunisians-head-to-elect-president-in-runoff-u-t-san-diegolibcurl stuck after redirect fail

Если вы откроете страницу, вы получите сообщение об ошибке о том, что страница не перенаправлять правильно. Когда я пытаюсь извлечь его, libcurl просто зависает, никакой ошибки вообще. Я также установил тайм-аут, который не работал, я думаю, так как он получил сообщение о переадресации. Вот мои настройки:

curl_easy_setopt(curl, CURLOPT_URL, "http://newsnow.in/news/tunisians-head-to-elect-president-in-runoff-u-t-san-diego"); // should be changed later with setLink() 
    /* example.com is redirected, so we tell libcurl to follow redirection */ 
    curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L); 
    curl_easy_setopt(curl, CURLOPT_USERAGENT, "Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:31.0) Gecko/20100101 Firefox/31.0"); 

    curl_easy_setopt(curl, CURLOPT_TIMEOUT, 20); 

    /* send all data to this function */ 
    curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data); 
    curl_easy_setopt(curl, CURLOPT_WRITEDATA, filePtr); 

и запустить его с обычным способом:

res = curl_easy_perform(curl); 

любые идеи о том, что могло бы решить эту проблему?

+0

вы можете попробовать добавить [ 'CURLOPT_VERBOSE'] (http://curl.haxx.se/libcurl/c/CURLOPT_VERBOSE.html), чтобы Libcurl выход более сообщений, чтобы вы знаете, что продолжается. Или вы можете просто использовать 'curl' инструмент для получения этого URL-адреса и посмотреть, что происходит. Если 'curl' отлично работает, вы можете использовать опцию' --libcurl FILE', чтобы позволить 'curl' переводить опции для кода для вас. – SSC

ответ

1

Для тех, кто встречая эту проблему в будущем, после комментария @SSC «S Я добавил флаг отладки:

curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L); 

И выяснили, страница входит в бесконечный цикл перенаправлений, это легко решается с помощью макс перенаправлять флаг:

curl_easy_setopt(curl, CURLOPT_MAXREDIRS, 3L);