从需要授权的页面获取内容

时间:2016-05-09 17:02:48

标签: javascript php node.js file-get-contents roblox

我在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;

正如您所看到的,我已经为页面设置了用户名,密码和cookie(就像我在Node.js scrpt中所做的那样),但是发生了指定的错误。

我想补充一点,如果它是一个更好的解决方案,我可以使用cURL

1 个答案:

答案 0 :(得分: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;