分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 运营维护

cURL和file_get_contents实现模拟post请求

发布时间:2023-09-06 01:57责任编辑:傅花花关键词:暂无标签

以前面试时候,面试官问过我后端有没有跨域问题,但是不敢肯定,现在可以肯定的说没有。

不文用php的cURL和file_get_contents方法分别实现后端跨域。本文场景也是在tp5下实现的。

一,利用cURL实现

1)前端代码,这是一个页面,访问的路径为http://app.write.com/thinkphp/public/index.php/index/index/curl,模块index,控制器index,方法curl

 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 ????<meta charset="UTF-8"> 5 ????<title>测试curl</title> 6 </head> 7 <body> 8 ?????9 ????<div id="test">10 ????????11 ????</div>12 ????<script type="text/javascript">13 ????????//利用原生的xml14 ????var oAjax = new XMLHttpRequest();15 ????oAjax.open(‘GET‘,"/thinkphp/public/index.php/index/index/curlApi");//前端为get请求url,不影响后端16 ????oAjax.onreadystatechange = function() {17 ????????if (oAjax.readyState == 4) {18 ????????????if (oAjax.status >= 200 && oAjax.status < 300 || oAjax.status == 304) {19 ???????????????console.log(oAjax.responseText);20 ???????????????var data=JSON.parse(oAjax.responseText);21 ???????????????document.getElementById("test").innerHTML=data.elist[0].Code;22 ????????????} else {23 ????????????????console.log(oAjax.status);24 ????????????}25 ????????}26 ????};27 ????oAjax.send();28 ????</script>29 </body>30 </html>

2)接口代码

 1 ?//封装的利用curl实现的方法 2 ??????public function doCurlPostRequest($url,$requestString,$timeout = 5){ 3 ?????????if($url == ‘‘ || $requestString == ‘‘ || $timeout <=0){ 4 ???????????????return false; 5 ??????????} 6 ????????$con = curl_init((string)$url);//初始化一个cURL会话。 7 ????????//设置会话的相关选项 8 ????????curl_setopt($con, CURLOPT_HEADER, false); 9 ????????curl_setopt($con, CURLOPT_POSTFIELDS, $requestString);10 ????????curl_setopt($con, CURLOPT_POST,true);11 ????????curl_setopt($con, CURLOPT_RETURNTRANSFER,true);12 ????????curl_setopt($con, CURLOPT_TIMEOUT,(int)$timeout);13 ????????//执行一个cURL会话。14 ????????$data = curl_exec($con); ?15 ????????//关闭一个会话16 ????????curl_close($con); ?17 ????????18 ????????return $data; 19 ?????}20 ?????public function curlApi(){21 ????????//自定义参数举例22 ?????????$urlArr=[23 ????????????"pageno"=>1,24 ????????????"pagesize"=>200,25 ????????????"condstr"=>"社会大课堂:0"26 ?????????];27 ????????$post_string = http_build_query($urlArr);28 ???????29 ????????$url="跨域完整地址";30 ????????return $this->doCurlPostRequest($url,$post_string);31 ????????///return "common";32 ????}

二,利用file_get_contents实现

前端代码一致,后端对方法进行了封装

 1 ??public function fileGetContent($sUrl,$data){ 2 ???????????$aContext = [ 3 ????????????‘http‘ => [ 4 ????????????????‘method‘ => ‘POST‘, 5 ????????????????‘header‘ ?=> ‘Content-type: application/x-www-form-urlencoded‘, 6 ????????????????‘content‘ => $data 7 ??????????????] 8 ??????????]; ??9 ??10 ???????$cxContext ?= stream_context_create($aContext); ?//创建并返回一个文本数据流并应用各种选项11 ???????$d = file_get_contents($sUrl,false,$cxContext); ?12 ???????return $d;13 ?????}

将上述的doCurlPostRequest方法换成fileGetContent就可以了。

当然还可以将两个方法放到common.php中直接使用。

本文结束。

cURL和file_get_contents实现模拟post请求

原文地址:https://www.cnblogs.com/zhensg123/p/9104261.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved