cURL возвращает пустой вывод из действительного URL-адреса - об ошибках не сообщается - PullRequest
3 голосов
/ 01 декабря 2011

Если вы просто введете URL-адреса в браузер, вы увидите, что оба работают, cdon работает даже без javascript, они каким-то образом заблокировали cURL?

Я пытаюсь построить скребок для использования в Интернете легальных фильмовчто принесло бы им много пользы, кажется, глупые блокирующие скребки вообще imho.Хотя я далеко не уверен, что здесь происходит!Может быть, где-то просто ошибка ..

// Works
get_file1('http://sfanytime.com/sv-SE/Sokresultat/?field=all&q=The+Matrix', '/', 'sfanytime.html');

// Saves a blank 0 KB file
get_file1('http://downloads.cdon.com/index.phtml?action=search&search_terms=The+Matrix', '/', 'cdon.html');

function get_file1($file, $local_path, $newfilename) {
    $out = fopen($newfilename, 'wb');
    if ($out === FALSE) {
        return false;
    }      
    $ch = curl_init();             
    curl_setopt($ch, CURLOPT_FILE, $out);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_URL, $file);                  
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);

    curl_exec($ch);
    $error = curl_error($ch);
    if (strlen($error) > 0) {
            echo "<br>Error is : ". $error;
        return false;
    }
    curl_close($ch);
    return true;
}

1 Ответ

3 голосов
/ 01 декабря 2011

Вы должны изменить строку

curl_setopt($ch, CURLOPT_FAILONERROR, true);

... для ...

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);

CURLOPT_FAILONERROR вызовет «тихий сбой» - что, как вы говорите, не то, что вы хотите. Я заменил это на CURLOPT_FOLLOWLOCATION, потому что, когда я посещаю второй URL-адрес, меня перенаправляют на страницу типа «выберите свою страну», которая будет ответом с пустым телом - именно поэтому вы получаете пустой файл. 1009 *

Нет проблем с вашим кодом как таковым, просто проблема с тем, как вы обрабатываете ответ со второго URL. Вы не видите ошибки, потому что технически ее не было.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...