Войдите на сайт используя PHP и получите текст со страницы - PullRequest
0 голосов
/ 20 ноября 2010

Я пытаюсь войти на сайт и получить контент со страницы, которую вы должны авторизовать, чтобы увидеть.Я провел некоторое исследование и видел несколько примеров, использующих как cURL, так и stream_context_create, но я не могу найти способ работать.У меня есть URL-адрес страницы для входа и страница, содержащая данные, которые мне нужны.Ваша помощь очень ценится!

Вот с чем я работаю:

<?php 
    $pages = array('home' => 
'https://www.53.com/wps/portal/personal', 
               'login' => 
'https://www.53.com/wps/portal/personal', 
               'data' => 
'https://www.53.com/servlet/efsonline/index.html?Messages.SortedBy=DATE,REVERSE'); 
    $ch = curl_init(); 
    //Set options for curl session 
    $options = array(CURLOPT_USERAGENT => 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)', 
             CURLOPT_SSL_VERIFYPEER => FALSE, 
             CURLOPT_SSL_VERIFYHOST => 2, 
             CURLOPT_HEADER => TRUE, 
             //CURLOPT_RETURNTRANSFER => TRUE, 
             CURLOPT_COOKIEFILE => 'cookie.txt', 
             CURLOPT_COOKIEJAR => 'cookies.txt'); 

    //Hit home page for session cookie 
    $options[CURLOPT_URL] = $pages['home']; 
    curl_setopt_array($ch, $options); 
    curl_exec($ch); 

    //Login 
    $options[CURLOPT_URL] = $pages['login']; 
    $options[CURLOPT_POST] = TRUE; 
    $options[CURLOPT_POSTFIELDS] = 'uid-input=xxx&pw=xxx'; 
    $options[CURLOPT_FOLLOWLOCATION] = FALSE; 
    curl_setopt_array($ch, $options); 
    curl_exec($ch); 

    //Hit data page 
    $options[CURLOPT_URL] = $pages['data']; 
    curl_setopt_array($ch, $options); 
    $data = curl_exec($ch); 

    //Output data
    echo $data; 

    //Close curl session 
    curl_close($ch); 
?>

Приветствия,

Энтони

Ответы [ 3 ]

0 голосов
/ 20 ноября 2010

Энтони, некоторое время назад мне пришлось построить что-то подобное.На чем нужно сосредоточиться, так это на куки.

Curl обрабатывает куки-файлы, вам нужно сначала убедиться, что вы вошли в систему и загрузили данные в том же соединении.Если вы не можете использовать одно и то же соединение, вы можете использовать опции CURLOPT_COOKIE или CURLOPT_COOKIEFILE, чтобы помочь вам.Подробнее об этом: http://ar2.php.net/manual/en/function.curl-setopt.php

0 голосов
/ 21 ноября 2010

Вы используете идентификаторы полей логина вместо имен:

$options[CURLOPT_POSTFIELDS] = 'uid-input=xxx&pw=xxx'; 

должно быть

$options[CURLOPT_POSTFIELDS] = 'UserName=xxx&Password=xxx'; 
0 голосов
/ 20 ноября 2010

Если вы посмотрите на Как разместить данные в PHP с помощью file_get_contents? вы, вероятно, получите то, что вам нужно.

(я думаю, вам нужно сделать то же сообщение, что иВы входите в систему и продолжаете сеанс оттуда)

Редактировать (как ответ на вопрос ниже)

В первом запросе клиент ответит некоторым файлом cookie после входа в систему.Этот файл cookie вы должны установить в качестве заголовка во втором запросе.

Если вы получили 500 ошибок, возможно, сервер отклонил ваш запрос, поскольку вы не отправили ему достаточно заголовков.Нередко вас отвергают.Попробуйте сделать следующее:

$opts = array('http' =>
array('method' => 'Get',
        'Header' => "Host: www.someserver.com\r\n".
        "User-Agent: Mozilla\r\n",
    'user_agent' => 'Mozilla'));

$context = stream_context_create($opts);

$fp = fopen('http://www.someserver.no', 'r', false, $context);
fpassthru($fp);
fclose($fp);

... какие заголовки вам могут понадобиться, зависит от сервера к серверу.

...