我正在尝试设置一个表单,该表单一旦提交,将通过API调用发送数据以保存到第三方门户。门户设置为主站点的子域,但托管在另一台服务器上。
在Postman中测试API调用时,仅当我通过代理连接时它们才有效,并且在选项中禁用了SSL证书验证。在网站上,我收到一个cURL错误:“ SSL证书问题:无法获取本地发行者证书”。管理主站点的服务器管理员试图按照此处https://curl.haxx.se/docs/sslcerts.html的详细信息解决此购买问题,但目前尚无法找到解决方案。
当他们找出证书问题时,我希望至少可以使用API调用,并且由于仍必须由客户人员手动审核任何提交,因此我认为一种快速的解决方法是禁用SSL验证在cURL调用中(显然不理想),作为客户端的临时解决方案。
我正在使用的cURL调用如下:
$url = "https://subdomain.primarydomain.com:444/api/v2/login?username=username&password=12345";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)");
$result = curl_exec($ch);
if ($result === false) {
echo 'Curl error: ' . curl_error($ch);
} else {
echo 'Operation completed without any errors';
}
curl_close($ch);
当执行cURL命令时,这将返回404 not found响应。如果代码是在主域服务器上运行的,或者即使通过VPN连接,即使在本地运行(WAMP),也会出现此结果。
但是,以下JS代码可以正常运行并返回预期结果:
async function getTkn()
{
var tkn = "";
try {
var postResult = await $.post("https://subdomain.primarydomain.com:444/api/v2/login", {username: "username", password: "12345"}, function(data){
console.log("success in post");
console.log(data);
tkn = data.token;
})
.done(function(data) {
console.log("post is done");
console.log(data);
if(data.token != "")
{
console.log("log in successful");
console.log("token-success: " + data.token);
// Save Registration Data
// await saveClientRegistration(tkn, fieldValues);
}
else
{
console.log("log in fail");
console.log("token-fail: " + data);
}
})
.fail(function(data) {
console.log("authentication failed");
})
.always(function(data) {
console.log("always finished");
}).then();
} catch(e) {
console.log(e);
}
return tkn;
}
由于我们需要以纯文本格式发送用户名/密码,因此我不想将这些用户名/密码存储在易于访问的JS文件中,因此我想使PHP cURL正常工作。
由于我在过去6个小时中一直在尝试与Google不同的方法,因此,有关如何解决cURL问题的任何建议将不胜感激。
更新:我尝试如下使用cURL中的代理选项,但没有成功。我收到错误消息:“接收失败:对等连接重置”
$proxy = 'maindomain_IP:444';
$proxyauth = 'proxy_user:proxy_pass';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_PROXY, $proxy);
curl_setopt($ch, CURLOPT_PROXYUSERPWD, $proxyauth);
//curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);
curl_setopt($ch, CURLOPT_PORT, 444);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT , 10);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
//curl_setopt ($ch, CURLOPT_VERBOSE, TRUE);
if (curl_exec($ch) === false) {
echo 'Curl error: ' . curl_error($ch);
} else {
echo 'Operation completed without any errors';
}
$content = curl_exec($ch);
curl_close($ch);