php curl не работает, возвращает пустую страницу, как я могу эмулировать настоящий браузер

Я хочу получить некоторые данные с веб-сайта, мой код отлично работает в wampserver, но когда я загрузил файл на реальный сервер, я не получаю никакого результата, он показывает мне пустую страницу, вот мой код.

    <?php 
error_reporting(E_ALL);

$htm = my_curl($url);
echo $htm;
$dat = file_get_contents('cookies.txt');

echo "<pre>";
echo PHP_EOL . "<b>$url</b>";
echo PHP_EOL . "<i>$dat</i>";
echo PHP_EOL;


function my_curl( $url, $timeout=5, $error_report=TRUE)
{
    $curl = curl_init();


    $header[] = "Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5";
    $header[] = "Cache-Control: max-age=0";
    $header[] = "Connection: keep-alive";
    $header[] = "Keep-Alive: timeout=5, max=100";
    $header[] = "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7";
    $header[] = "Accept-Language: en-us,en;q=0.5";
    $header[] = ""; // BROWSERS USUALLY LEAVE BLANK

    // SET THE CURL OPTIONS - SEE http://php.net/manual/en/function.curl-setopt.php
    curl_setopt( $curl, CURLOPT_URL,            $url  );
    curl_setopt( $curl, CURLOPT_USERAGENT,      'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6'  );
    curl_setopt( $curl, CURLOPT_HTTPHEADER,     $header  );
    curl_setopt( $curl, CURLOPT_REFERER,        'http://www.google.com'  );
    curl_setopt( $curl, CURLOPT_ENCODING,       'gzip,deflate'  );
    curl_setopt( $curl, CURLOPT_AUTOREFERER,    TRUE  );
    curl_setopt( $curl, CURLOPT_RETURNTRANSFER, TRUE  );
    curl_setopt( $curl, CURLOPT_FOLLOWLOCATION, TRUE  );
    curl_setopt( $curl, CURLOPT_COOKIEFILE,     'cookies.txt' );
    curl_setopt( $curl, CURLOPT_COOKIEJAR,      'cookies.txt' );
    curl_setopt( $curl, CURLOPT_TIMEOUT,        $timeout  );


    $htm = curl_exec($curl);

    // ON FAILURE HANDLE ERROR MESSAGE
    if ($htm === FALSE)
    {   echo 'HELO';
        if ($error_report)
        {echo 'HELOs';
            $err = curl_errno($curl);
            $inf = curl_getinfo($curl);
            echo "CURL FAIL: $url TIMEOUT=$timeout, CURL_ERRNO=$err";
            var_dump($inf);
        }
        curl_close($curl);
        return FALSE;
    }

    // ON SUCCESS RETURN XML / HTML STRING
    curl_close($curl);
    return $htm;
}

Я проверил свою конфигурацию php, все в порядке. Я не смог найти ответа ни в одном другом связанном сообщении в Stack Overflow.

Ошибка:

CURL FAIL: http://14.139.236.46:7001/Forms/Student/PrintReportCard.aspx?rollno=11013001027&sem=07 TIMEOUT=5, CURL_ERRNO=7array(22) { ["url"]=> string(86) "http://14.139.236.46:7001/Forms/Student/PrintReportCard.aspx?rollno=11013001027&sem=07 " ["content_type"]=> NULL ["http_code"]=> int(0) ["header_size"]=> int(0) ["request_size"]=> int(0) ["filetime"]=> int (-1) ["ssl_verify_result"]=> int(0) ["redirect_count"]=> int(0) ["total_time"]=> float(0) ["namelookup_time"]=> float(0.001099) [" connect_time"]=> float(0) ["pretransfer_time"]=> float(0) ["size_upload"]=> float(0) ["size_download"]=> float(0) ["speed_download"]=> float (0) ["speed_upload"]=> float(0) ["download_content_length"]=> float(-1) ["upload_content_length"]=> float(-1) ["starttransfer_time"]=> float t(0) ["redirect_time"]=> float(0) ["certinfo"]=> array(0) { } ["redirect_url"]=> string(0) "" }


person 51j0    schedule 14.03.2015    source источник
comment
Вы пробовали file_get_contents() ? Он также принимает URL-адрес в качестве аргумента.   -  person kkaosninja    schedule 14.03.2015
comment
да, это то, что я пробовал в первую очередь, и это тоже не работает   -  person 51j0    schedule 14.03.2015
comment
Либо этот сайт обрабатывается более пяти секунд, либо вы обращаетесь к неправильному IP/порту, либо у вас нет четкого пути между этим скриптом и сервером. Вам нужно открыть брандмауэр?   -  person halfer    schedule 15.03.2015
comment
@halfer Я новичок в концепции curl, я пытаюсь получить свой бланк с веб-сайта университета ... мой код отлично работает на wampserver ... можете ли вы объяснить, почему мой код не работает на реальном сервере. могу ли я заставить это работать   -  person 51j0    schedule 15.03.2015
comment
Похоже, ваш настоящий сервер не может получить доступ к этому IP-адресу. Может там фаервол мешает, может вообще запрещено делать какие-то внешние подключения. Попробуйте выполнить простую выборку на любом общедоступном веб-сайте по вашему выбору, чтобы проверить, работает ли это.   -  person halfer    schedule 15.03.2015
comment
@halfer Да, я могу получить google.com   -  person 51j0    schedule 15.03.2015
comment
Хорошо, я полагаю, что есть правило брандмауэра, разрешающее трафик через порт 80 (который использует Google), но не через порт 7001, который не является стандартным веб-портом. Свяжитесь с администратором этого веб-сервера, чтобы узнать, откроют ли они нужный вам порт. Однако они могут отклонить этот запрос по соображениям безопасности.   -  person halfer    schedule 15.03.2015
comment
@halfer Итак, если мой администратор сервера отклоняет мой запрос, есть ли другой способ, из которого я могу получить данные?   -  person 51j0    schedule 15.03.2015
comment
Это общий хост? Я подозреваю, что это будет обычная конфигурация на общих серверах. Самый надежный способ сделать это — иметь собственный сервер, чтобы вы могли настроить брандмауэр по своему усмотрению. Небольшой VPS может сделать это, и в наши дни он почти ничего не стоит.   -  person halfer    schedule 15.03.2015
comment
Хорошо, в основном мой университетский сервер не отклоняет мой запрос? это мой собственный сервер, который не позволяет мне получать данные   -  person 51j0    schedule 15.03.2015


Ответы (2)


Я думаю, что ваш URL-адрес недействителен - на данный момент ваш URL-адрес выглядит примерно так:

http://14.139.236.46:7001/Forms/Student/PrintReportCard.aspxrollno=123&sem=456

Хотя я предполагаю, что это должно быть:

http://14.139.236.46:7001/Forms/Student/PrintReportCard.aspx?rollno=123&sem=456

Добавить ? между aspx и rollno и повторите попытку

person bhttoan    schedule 15.03.2015

Попробуйте настроить порт отдельно.

curl_setopt($ch, CURLOPT_PORT, 7001);

person PrimuS    schedule 14.03.2015
comment
Не повезло .. до сих пор нет результата - person 51j0; 14.03.2015
comment
Он имел в виду CURLOPT_PORT, а не CURLOPT - person Bijan; 15.03.2015
comment
@smottt Можешь взглянуть на это? - person 51j0; 15.03.2015