https网页请求http的接口
错误提示
使用curl封装一个实现后端get和post请求的函数 单独整理了curl的请求封装。需要的话请移步这里。
在日常工作中,在使用自己服务器https请求公司服务器http接口的时候,返回了错误:
Mixed Content: The page at 'https://www.wubin.work/.../share-from-xin.html' was loaded over HTTPS, but requested an insecure XMLHttpRequest endpoint 'http://mp2.qdxin.cn/jx_3de5s9u73iv/getinfo/bin/test1.php?url=https://www.wubin.work/.../share-from-xin.html'. This request has been blocked; the content must be served over HTTPS.
这是提示https的服务不可以请求http的接口,如果必须要使用,那么就需要在自己的服务器上做反向代理。
解决方法
1、方便起见,前端以JQuery为例:在https的服务器上:
<body>
<script src="https://vip.qdxin.cn/navmenu/js/jxinq111.js"></script>
<script src="https://www.wubin.work/mychat/js/wx_share_from_xin.js"></script>
</body>
2、新建test.php文件,使用curl
<?php
// 重点PHP 封装的CURL请求数据的方法
function httpGet($url) {
$curl = curl_init();
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_TIMEOUT, 500);
curl_setopt($curl, CURLOPT_URL, $url);
// 请求的是https需要加上下面2句 不验证ssl证书
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
$res = curl_exec($curl);
if (!$res) {
echo 'Curl error: ' . curl_error($curl);
exit();
}
curl_close($curl);
return $res;
}
// 前端发来的参数
$url = $_GET['url'];
// 请求的地址 拼接参数
$jxurl = 'http://mp2.qdxin.cn/bin/test1.php?url=' . $url;
$getjx = httpGet($jxurl);
echo $getjx;
?>
3、在前端的js/wx_share_from_xin.js文件中 向test.php发送请求
其中t_tul是页面的地址,最终test.php接受的是:https://www.wubin/.../?url=https://...
$.ajax({
type: 'GET',
url: 'https://www.wubin.work/mychat/test.php',
data: { url: t_url },
error: function(e) {
console.log('has error!');
return false;
},
success: function(json) {
console.log(json);
}
});
4、在http的服务器上,简单返回个值 bin/test1.php
$url = $_GET['url'];
$res = [
'error' => 0,
'yes' => 'yes',
'url' => $url
];
echo json_encode($res);
5、最终在前台以及test.php可以打印出结果,如图