使用stream_context_create()进行HTTPS请求

时间:2018-01-04 17:07:58

标签: php curl login https

我的代码有问题,我得到的错误是:

  

警告:fopen(https://discordapp.com/api/v6/auth/login):无法打开流:HTTP请求失败! HTTP / 1.1 400 BAD REQUEST in   第15行的C:\ xampp \ htdocs \ s2.php

以下是相关代码:

<?php
$data = array("email" => 'Email@gmail.com', "password" => 'Password');
$data_string = json_encode($data);                                                                                   
$context_options = array (
        'https' => array (
            'method' => 'POST',
            'header'=> "Content-type: application/json\r\n"
                . "Content-Length: " . strlen($data_string). "\r\n",
                 'content' => $data_string

            )
        );

$context = stream_context_create($context_options);
$fp = fopen('https://discordapp.com/api/v6/auth/login', 'r', false, $context);

?>

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

似乎不再允许通过机器人直接登录,因为您应该使用Discord的OAuth2(how does OAuth2 work?)功能。这意味着您需要在Discord帐户中设置机器人,然后您可以在机器人上使用基于令牌的访问来对抗Discord的外部应用程序。 更改为不再允许基于bot的登录发生在2017年初左右,此时所有基于PHP的Discord相关Github应用程序都停止维护。 Here是关于通过自动登录禁止机器人的讨论和评论,并且this one关于必须使用OAuth2。

the Discord OAuth2 chapter中了解有关身份验证和漫游器的详情。

如果您可以详细说明您打算实现的目标,也许我们可以帮助您找到解决方案。

以前(不再有效)回答:

我没有使用DiscordApp,所以我还没有尝试过。您是否尝试将值作为FORM值发布到API?

,而不是发送JSON编码的数据
$postData = array(
  'email' => 'Email@gmail.com', 
  'password' => 'Password'
);
$params = array('https' =>
  array(
    'method'  => 'POST',
    'header'  => 'Content-type: application/x-www-form-urlencoded',
    'content' => $postData
  )
);

$context  = stream_context_create($params);

// get the entire response ...
$result = file_get_contents('https://discordapp.com/api/v6/auth/login', false, $context);

// ... or alternatively using fopen()
$fp = fopen('https://discordapp.com/api/v6/auth/login', 'r', false, $context);

我没有找到任何关于如何将参数传递给login URI的文档,但至少可以使用基于表单的正常登录方式。

根据DiscordApp Response codes,如果不理解呼叫(调用不存在的函数)或参数发送不正确,则可能会收到400,因此您应该了解如何调用{{1}使用脚本与参数接口。