我试着在过去几天找到这个问题的解决方案,但我不知道这里有什么问题。
所以问题很简单,但真的很奇怪。我不能在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结果。
如果有人有任何想法,那将非常感激。