Symfony 3:从控制器使用时卷曲GET超时,但从命令端工作

时间:2018-03-19 14:48:00

标签: php symfony curl

我试着在过去几天找到这个问题的解决方案,但我不知道这里有什么问题。

所以问题很简单,但真的很奇怪。我不能在symfony的控制器中使用curl(GET)。

我尝试实现一个简单的表单,您在表单中输入您的邮件,发送它,然后它从haveibeenpwned.com调用API(很棒的网站,您应该检查!)。答案是通过向您发送json格式字符串,基本告诉您邮件是否已被“黑客攻击”。

所以我在一个简单的PHP脚本中尝试我的代码。 - >行

在命令中尝试我的代码,并在服务器上使用该命令。 - >行

我在控制器中调用命令。 - >失败 我在控制器中测试我的curl脚本。 - > FAIL

所有代码都失败了它总是"错误:连接到haveibeenpwned.com:443失败;正在进行的操作"

但由于代码实际上是在一个简单的PHP脚本中工作,当我使用我在服务器端创建的命令时,我不明白控制器失败的原因。

这是命令

class checkMailCommand extends ContainerAwareCommand {
protected function configure()
{
    $this
        ->setName('curl:checkMail')
        ->setDescription('Check Mail')
        ->addArgument('emailCheck', InputArgument::REQUIRED, 'What\'s the email address we check?');
}

protected function execute(InputInterface $input, OutputInterface $output)
{
    $account = $input->getArgument('emailCheck');

    $curl = curl_init();

    curl_setopt_array($curl, array(
        CURLOPT_URL => "https://haveibeenpwned.com/api/v2/breachedaccount/".$account,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_TIMEOUT => 30,
        CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
        CURLOPT_CUSTOMREQUEST => "GET",
        CURLOPT_HTTPHEADER => array(
            "User-Agent: Pwnage-Checker-For-Safe-Portal",
            "api-version: 2"
        ),
    ));
    $output->writeln($curl);

    $response = curl_exec($curl);
    $err = curl_error($curl);

    curl_close($curl);

    if ($err){
        $output->writeln("error : ".$err);
    }
    else{
        $output->writeln($response);
    }
}

}

和控制器功能:

    public function checkMailAction(Request $request)
{
    $form = $this->createForm(checkMailType::class);
    $form->handleRequest($request);
    $message = null;
    $response = null;
    if ($form->isSubmitted() && $form->isValid()) {
        $kernel = $this->get('kernel');
        $application = new Application($kernel);
        $application->setAutoExit(false);

        $input = new ArrayInput(array(
            'command' => 'curl:checkMail',
            'emailCheck' => $form["checkMail"]->getdata()
        ));

        $output = new BufferedOutput();

        $application->run($input, $output);

        // return the output
        $response = $output->fetch();

        //$response = json_decode($response, true);
    }

    return $this->render('EXTgetcurlBundle:hibp:check.html.twig', array(
        "message"               => $message,
        "response"               => $response,
        "form"                  => $form->createView(),
    ));
}

非常清楚,当我在服务器上使用它时,这段代码就像魅力一样,使用命令

php bin/console curl:checkMail [mail] 

当我在一个简单的test.php"中使用它时和print_r结果。

如果有人有任何想法,那将非常感激。

0 个答案:

没有答案