我正在尝试拨打花旗银行的开放API(https://developer.citi.com/),这要求我抓住屏幕以允许用户使用他的用户名和密码登录。
如果我只是将带有参数的URL放在浏览器中,那么这是有效的。
https://sandbox.apihub.citi.com/gcb/api/authCode/oauth2/authorize?response_type=code&client_id=<my_client_id>&scope=pay_with_points&countryCode=SG&businessCode=GCB&locale=en_SG&state=12093&redirect_uri=<my_callback>
但是,当我尝试使用curl从我的PHP代码进行相同的调用时,它返回状态代码503。
<?php
$header = array();
$header[] = 'Upgrade-Insecure-Requests: 1';
$header[] = 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8';
$header[] = 'Accept-Encoding: gzip, deflate, br';
$header[] = 'Accept-Language: en-US,en;q=0.8,ja;q=0.6,zh-CN;q=0.4,zh;q=0.2,zh-TW;q=0.2,th;q=0.2';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://sandbox.apihub.citi.com/gcb/api/authCode/oauth2/authorize?response_type=code&client_id=<my_client_id>=pay_with_points&countryCode=SG&businessCode=GCB&locale=en_SG&state=12093&redirect_uri=<my_callback_url>');
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36');
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_AUTOREFERER, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_ENCODING, '');
curl_setopt($ch, CURLOPT_TIMEOUT, 20);
$result = curl_exec($ch);
curl_close ($ch);
echo $result;
?>
我试图更改我的请求标题,以便它就像我在浏览器中输入URL一样。
我一定错过了我需要在curl中配置的东西。
有人会有一些想法吗?谢谢!
答案 0 :(得分:1)
问题可能是由于https。可用的选项很少。
1。您可以下载 https://curl.haxx.se/ca/cacert.pem文件并保存,然后添加此选项
curl_setopt($ch, CURLOPT_CAINFO, "/path/to/cacert.pem");
2. 您可以通过访问该网站从浏览器下载证书,并执行与上述相同的操作。如果他们更改了证书,您可能会遇到问题,需要与他们确认。
3。建议不要这样做,但如果这是实际问题,可以暂时用于调试目的。它引入了MIMT攻击。
//Only use for debugging purposes.
curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, 0);
答案 1 :(得分:-1)
您可以使用 header('location: '.$url);