curl 方式及证书验证跳过设置
提交数据到https时,需要pem证书来加密。
我们使用浏览器访问https的时候,浏览器会自动加载网站的安全证书进行加密。但是你用curl请求https时,没有通过浏览器,就只有自己手动增加一个安全证书进行加密。
curl 请求一共分四步,初始化,设置属性,执行并获取结果,释放句柄
一 需要验证:
1 function httpGet($url) { 2 $curl = curl_init(); 3 curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 4 curl_setopt($curl, CURLOPT_TIMEOUT, 500); 5 // 为保证第三方服务器与微信服务器之间数据传输的安全性,所有微信接口采用https方式调用,必须使用下面2行代码打开ssl安全校验。 6 // 如果在部署过程中代码在此处验证失败,请到 http://curl.haxx.se/ca/cacert.pem 下载新的证书判别文件。 7 curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true); 8 curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, true); 9 curl_setopt($curl,CURLOPT_CAINFO,dirname(__FILE__).'/cacert.pem');//这是根据http://curl.haxx.se/ca/cacert.pem 下载的证书,添加这句话之后就运行正常了 10 curl_setopt($curl, CURLOPT_URL, $url); 11 12 $res = curl_exec($curl); 13 curl_close($curl); 14 15 return $res; 16 }
二 不需要验证:
1 function getCurl($url) { 2 // 创建一个新cURL资源 3 $ch = curl_init(); 4 5 // 设置URL和相应的选项 6 curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); // 跳过证书验证(https)的网站无法跳过,会报错 7 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 跳过证书验证 8 curl_setopt($ch, CURLOPT_URL, $url); 9 curl_setopt($ch, CURLOPT_HEADER, 0); 10 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // 返回的数据不打印 11 // 抓取URL并把它传递给浏览器 12 $rs = curl_exec($ch); 13 if($rs === false) { 14 return 'Curl error: ' . curl_error($ch); 15 } 16 // 关闭cURL资源,并且释放系统资源 17 curl_close($ch); 18 return $rs; 19 }
知识点摘要:
CURLOPT_SSL_VERIFYPEER 设置为FALSE 禁止 cURL 验证对等证书(peer’s certificate)。要验证的交换证书可以在 CURLOPT_CAINFO 选项中设置,或在 CURLOPT_CAPATH中设置证书目录。
CURLOPT_CAINFO 一个保存着1个或多个用来让服务端验证的证书的文件名。这个参数仅仅在和CURLOPT_SSL_VERIFYPEER一起使用时才有意义。可能需要绝对路径。
CURLOPT_CAPATH 一个保存着多个CA证书的目录。这个选项是和CURLOPT_SSL_VERIFYPEER一起使用的。
CURLOPT_SSL_VERIFYHOST 设置为 1 是检查服务器SSL证书中是否存在一个公用名(common name)。译者注:公用名(Common Name)一般来讲就是填写你将要申请SSL证书的域名 (domain)或子域名(sub domain)。 设置成 2,会检查公用名是否存在,并且是否与提供的主机名匹配。 在生产环境中,这个值应该是 2(默认值)。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
· 【.NET】调用本地 Deepseek 模型
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· 我与微信审核的“相爱相杀”看个人小程序副业
· DeepSeek “源神”启动!「GitHub 热点速览」
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库