用PHP来抓取一个不工作的网站

uttx8gqw  于 2023-04-28  发布在  PHP
关注(0)|答案(2)|浏览(100)

我试图调用花旗银行的开放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中配置的东西。
有人知道吗?谢谢大家!

8yoxcaq7

8yoxcaq71#

问题可能是由于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);
92dk7w1h

92dk7w1h2#

可以使用header('location:'.$url);

相关问题