php+ajax简单实现跨域(http+https)请求调用

Posted Chervehong

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php+ajax简单实现跨域(http+https)请求调用相关的知识,希望对你有一定的参考价值。

当一个网站 a站 需要调用另一个网站 b站 列表文章时

比如:www.a123.com 调用 www.b456.com 文章

在 a站 建立php文件获取 b站 资源文章到本地后,再传递a站前端

在网站 b456 下Doc文件为

<ul class="ls_wz">
<li><a href="#" target="_blank" title="title1" >内容1</a><span>[1970-01-01]</span></li>
<li><a href="#" target="_blank" title="title2" >内容2</a><span>[1970-01-01]</span></li>
<li><a href="#" target="_blank" title="title3" >内容3</a><span>[1970-01-01]</span></li>
</ul>

在网站 a123 根目录(随意)下建立

a .php 文件:

 <?php
//获取文中传递参数
//$data[‘title‘]=$_GET[‘title‘];
// $data[‘link‘]=$_GET[‘link‘];
// $data[‘pubDate‘]=$_GET[‘pubDate‘];
  $data[‘callback‘]=$_GET[‘callback‘];//尤为重要模拟跨callback
 //$data = array(‘title‘=>title,‘link‘=>link,‘pubData‘=>pubData,‘callback‘=>callback);
   //$dataToJson = json_encode($data);
    //var_dump($data);
   $url="http://www.b456.com/b.php";//B站请求地址
   $postdata = http_build_query($data);
     $opts = array(
       ‘http‘=>array(
       ‘method‘=>"GET",
       ‘timeout‘=>60,
     )
   );
   $context = stream_context_create($opts);
   $result = file_get_contents($url."?".$postdata, false, $context);
   echo  $result;
   //var_dump($result);
 ?>

a.html 文件:

<script type="text/javascript" src="js/jquery.min.js"></script>
<div id="zd" class="ls_wz" style="height:144px; overflow:hidden">        
</div>        
           <script>
            $(function() {
                var url =  http://www.a123.com/a.php;
                $.ajax({
                    type: "get",
                    url: url,
                    async: false,
                    //dataType:‘jsonp‘,
                    success: function (data) {
                        var html = data;
                        //html += ‘<p class="more"><a target="_blank" href="#">更多+</a></p>‘;
                        $("#zd").html(html);
                        //alert(‘#zd‘);
                    }
                })
            })
        </script>
<style>
/*css*/
.ls_wz{ float: left;height:144px;overflow:hidden;}
.ls_wz li{ list-style:none; line-height:23px; padding: 0 8px; font-size:12px; width:320px; padding-left:12px;
     overflow:hidden;white-space: nowrap;text-overflow: ellipsis;} 
.ls_wz li a {word-break: keep-all;white-space: nowrap;display: inline-block;width: 320px;overflow: hidden;text-decoration:none;
    text-overflow: ellipsis;}
.ls_wz li a:hover{color:#C30000; text-decoration:underline; }
.ls_wz li span{ display:none;}
</style>

还有一种情况就是,当遇到

http 和 https 通过认证验证的跨域请求调用:

header(‘Content-Type: text/html;charset=utf-8‘);
header(‘Access-Control-Allow-Origin: *‘); //指定访问网站请求
header(‘Access-Control-Allow-Methods:POST,GET,OPTIONS,DELETE‘); // 允许请求的类型
header(‘Access-Control-Allow-Credentials: true‘); // 设置是否允许发送 cookies
header(‘Access-Control-Allow-Headers: Content-Type,Content-Length,Accept-Encoding,X-Requested-with, Origin‘); // 设置允许自定义请求头的字段

当然了,不希望别人访问当前的文件:

//禁止访问当前文件 
$fromurl="http://localhost/"; //跳转到这个地址。
if( $_SERVER[‘HTTP_REFERER‘] == "" )
{
header("Location:".$fromurl); exit;
}

以上是关于php+ajax简单实现跨域(http+https)请求调用的主要内容,如果未能解决你的问题,请参考以下文章

ajax跨域问题简单解决--

简单ajax跨域请求

Ajax概念HTTP请求概念Ajax的原生和jQuery实现跨域知识

Ajax概念HTTP请求概念Ajax的原生和jQuery实现跨域知识

jQuery Ajax 简单的实现跨域请求

ajax本地跨域问题