7

我正在尝试制作一个机器人:https ://coinroll.it/api

来自网站:
Coinroll API 是一个通过 HTTPS 工作的无状态接口。请求使用 POST 变量 (application/x-www-form-urlencoded) 进行,而响应以 JSON (application/json) 编码。访问 API 需要 HTTPS 连接。

我有以下代码:

$ch = curl_init();
$data = array('user' => 'xxx', 'password' => 'yyy');
curl_setopt($ch, CURLOPT_URL, 'https://coinroll.it');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/x-www-form-urlencoded'));   
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
$result = curl_exec($ch);
echo $result;

当我运行此代码时,它返回一个空白页,我做错了什么?

编辑
我实际上不需要使用 cURl,如果有更好的解决方案,请告诉我。

4

3 回答 3

12

您可以阻止 cURL 尝试通过使用来验证 SSL 证书CURLOPT_VERIFYPEER

还要在 URL 中设置操作:

$ch = curl_init();
$data = array('user' => 'xxx', 'password' => 'yyy');
curl_setopt($ch, CURLOPT_URL, 'https://coinroll.it/getbalance');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
$result = curl_exec($ch);
echo $result;
于 2013-07-05T14:36:35.053 回答
3

您可以使用以下 cURL 选项来查看 HTTP 连接发生了什么:

curl_setopt($ch, CURLOPT_VERBOSE, true);

当为 TRUE 时,它会输出详细信息。

于 2014-12-16T22:17:30.430 回答
0

今天我遇到了“直到现在它一直工作正常”的情况,但是当 FQDN 更改时它停止工作,我不得不使用不同的 DN 自行签署另一个证书。

经过几次实验,结果证明Subject Alternate Name(又名 SAN)与证书名称不匹配,并且 curl 调用没有设置为CURLOPT_SSL_VERIFYHOST, 2.

结论:默认情况下,CURLOPT_SSL_VERIFYHOST 设置为 2,但是,如果您的 cert SAN 错误,它将失败,除非您停用 CURLOPT_SSL_VERIFYHOST,并随之停用 CURLOPT_SSL_VERIFYPEER。

显然,最好的做法是同时设置两者,并拥有与主题相匹配的 SAN。

提醒:这是在命令行上使用 OpenSSH 快速检查 SAN 的方法:

openssl x509 -in /etc/ssl/certs/recette.pharmags.fr.crt -noout -text | grep -A1 "Subject Alternative Name"

于 2021-01-29T14:57:59.240 回答