2016-05-09 2 views
3

У меня есть успешный скрипт в Node.js, которому удается получить контент со страницы, требующей авторизации, путем имитации процесса входа в систему.Получить контент со страницы, требующей авторизации

Теперь мне нужно получить контент с веб-страницы для немного другой цели с помощью PHP и попытаться «преобразовать» скрипт из Javascript в PHP, однако он не работает.

Может кто-нибудь помочь мне переключить код с Javascript на PHP или сообщить мне, что случилось с моим текущим кодом?

Javascript Node.js Авторизация

var request = require("request"); 
var j = request.jar(); 
var cookie = request.cookie('entercookie'); 

j.setCookie(cookie, 'http://www.example.com'); 
var request = request.defaults({jar: j}); 

request.post('https://www.example.com/login', {username: 'username', password: 'password'}, function(err, res, body) { 
    makeRequest(100); 
}); 

PHP Авторизация

$homepage = 'http://example.com'; 

$postData = http_build_query(
    array(
     'username' => 'username', 
     'password' => 'password' 
    ) 
); 
$cookie = 'cookie'; 

$context = stream_context_create(array(
    'http' => array(
     'method' => 'POST', 
     'header' => 'Content-type: application/x-www-form-urlencoded\r\n 
         Cookie: '.$cookie, 
     'content' => $postData 
    ) 
)); 
$data = file_get_contents($homepage, false, $context); 

echo $data; 

Как вы можете видеть, я установить имя пользователя, пароль и печенье для страницы (как я в скрипте Node.js), однако указанная ошибка возникает.

Я хотел бы добавить, что я открыт для использования cURL, если это лучшее решение.

+0

Может быть, я помню мои данные неправильно, но в базовой HTTP-авторизации, печенье Арен 't отправлено, так что не было бы конкатенации в base64 ': $ cookie' –

+0

@BrandonAnzaldi. Будет ли использовать' cURL' лучшее решение для этого? –

ответ

1

Ваша проблема в том, что на ваш код javascript вы делаете запрос POST с именем пользователя и паролем.

На ваш PHP код, который вы делаете запрос GET с базовой аутентификации, изменить код PHP на что-то вроде этого:

$homepage = 'http://authorizationpage.com'; 

$postData = http_build_query(
    array(
     'username' => 'username', 
     'password' => 'password' 
    ) 
); 
$cookie = 'cookie'; 

$context = stream_context_create(array(
    'http' => array(
     'method' => 'POST', 
     'header' => 'Content-type: application/x-www-form-urlencoded\r\n 
         Cookie: '.$cookie, 
     'content' => $postData 
    ) 
)); 
$data = file_get_contents($homepage, false, $context); 

echo $data; 
+0

Хммм ... Кажется, я получаю сообщение об ошибке 'Notice: file_get_contents(): Content-type not defined, предполагающий application/x-www-form-urlencoded' и' Warning: file_get_contents (http://authorizationpage.com): не удалось открыть поток: HTTP-запрос не удался! HTTP/1.1 403 Ошибка проверки токена' –

+0

Было бы проще, если бы я дал вам URL-адрес страницы, требующей авторизации? –

+0

@bobjomes Я добавил контент в заголовок, чтобы удалить уведомление, так как для предупреждения кажется, что ваш сайт запрашивает токен, и он дает вам 403 –

Смежные вопросы