【问题标题】:Get content from page requiring authorization从需要授权的页面获取内容
【发布时间】:2016-09-04 10:13:52
【问题描述】:

我在 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 脚本中所做的那样),但是出现了指定的错误。

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

【问题讨论】:

  • 也许我记错了我的规范,但是在 HTTP 基本授权中,cookie 不会一起发送,因此:$cookie 的 base64 中不会有串联
  • @BrandonAnzaldi 使用cURL 会是更好的解决方案吗?

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


【解决方案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;

【讨论】:

  • 嗯...我似乎收到了错误 Notice: file_get_contents(): Content-type not specified assuming application/x-www-form-urlencodedWarning: file_get_contents(http://authorizationpage.com): failed to open stream: HTTP request failed! HTTP/1.1 403 Token Validation Failed
  • 如果我给你需要授权的页面的URL会更容易吗?
  • @bobjomes 我将内容添加到标题以删除通知,至于警告似乎您的网站请求令牌并且它给了您一个 403
  • 我调整了代码(使用您更新的答案),Notice 现在消失了,但另一个 Warning 仍然存在。为什么它在 Node.js 中有效但在 PHP 中无效?
  • @bobjomes 我猜是 cookie 有问题,你能展示一下吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-12
  • 2020-06-26
  • 1970-01-01
  • 2016-03-28
  • 2012-09-17
  • 1970-01-01
相关资源
最近更新 更多