cURL和file_get_contents实现模拟post请求
以前面试时候,面试官问过我后端有没有跨域问题,但是不敢肯定,现在可以肯定的说没有。
不文用php的cURL和file_get_contents方法分别实现后端跨域。本文场景也是在tp5下实现的。
一,利用cURL实现
1)前端代码,这是一个页面,访问的路径为http://app.write.com/thinkphp/public/index.php/index/index/curl,模块index,控制器index,方法curl
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>测试curl</title>
</head>
<body> <div id="test"> </div>
<script type="text/javascript">
//利用原生的xml
var oAjax = new XMLHttpRequest();
oAjax.open('GET',"/thinkphp/public/index.php/index/index/curlApi");//前端为get请求url,不影响后端
oAjax.onreadystatechange = function() {
if (oAjax.readyState == ) {
if (oAjax.status >= && oAjax.status < || oAjax.status == ) {
console.log(oAjax.responseText);
var data=JSON.parse(oAjax.responseText);
document.getElementById("test").innerHTML=data.elist[].Code;
} else {
console.log(oAjax.status);
}
}
};
oAjax.send();
</script>
</body>
</html>
2)接口代码
//封装的利用curl实现的方法
public function doCurlPostRequest($url,$requestString,$timeout = ){
if($url == '' || $requestString == '' || $timeout <=){
return false;
}
$con = curl_init((string)$url);//初始化一个cURL会话。
//设置会话的相关选项
curl_setopt($con, CURLOPT_HEADER, false);
curl_setopt($con, CURLOPT_POSTFIELDS, $requestString);
curl_setopt($con, CURLOPT_POST,true);
curl_setopt($con, CURLOPT_RETURNTRANSFER,true);
curl_setopt($con, CURLOPT_TIMEOUT,(int)$timeout);
//执行一个cURL会话。
$data = curl_exec($con);
//关闭一个会话
curl_close($con); return $data;
}
public function curlApi(){
//自定义参数举例
$urlArr=[
"pageno"=>,
"pagesize"=>,
"condstr"=>"社会大课堂:0"
];
$post_string = http_build_query($urlArr); $url="跨域完整地址";
return $this->doCurlPostRequest($url,$post_string);
///return "common";
}
二,利用file_get_contents实现
前端代码一致,后端对方法进行了封装
public function fileGetContent($sUrl,$data){
$aContext = [
'http' => [
'method' => 'POST',
'header' => 'Content-type: application/x-www-form-urlencoded',
'content' => $data
]
];
$cxContext = stream_context_create($aContext); //创建并返回一个文本数据流并应用各种选项
$d = file_get_contents($sUrl,false,$cxContext);
return $d;
}
将上述的doCurlPostRequest方法换成fileGetContent就可以了。
当然还可以将两个方法放到common.php中直接使用。
本文结束。
cURL和file_get_contents实现模拟post请求的更多相关文章
- php curl模拟post请求提交数据样例总结
在php中要模拟post请求数据提交我们会使用到curl函数,以下我来给大家举几个curl模拟post请求提交数据样例有须要的朋友可參考參考.注意:curl函数在php中默认是不被支持的,假设须要使用 ...
- 上curl java 模拟http请求
最近,我的项目要求java模拟http请求,获得dns解决 tcp处理过的信息特定的连接. java api提供urlConnection apache提供的httpClient都不能胜任该需求,二次 ...
- curl java 模拟http请求
curl java 模拟http请求 直接上代码: public static void main(String args[]) throws Exception { String url = &qu ...
- php curl模拟post请求的例子
curl 在php中要模拟post请求数据提交我们会使用到curl函数,下面我来给大家举几个curl模拟post请求提交数据例子有需要的朋友可参考参考. 注意:curl函数在php中默认是不被支持的, ...
- php curl模拟post请求提交数据例子总结
php curl模拟post请求提交数据例子总结 [导读] 在php中要模拟post请求数据提交我们会使用到curl函数,下面我来给大家举几个curl模拟post请求提交数据例子有需要的朋友可参考参考 ...
- curl和file_get_contents 区别以及各自的优劣
PHP中fopen,file_get_contents,curl函数的区别: 1.fopen /file_get_contents 每次请求都会重新做DNS查询,并不对 DNS信息进行缓存.但是CUR ...
- PHP CURL或file_get_contents获取网页标题的代码及两者效率的稳定性问题
PHP CURL与file_get_contents函数都可以获取远程服务器上的文件保存到本地,但在性能上面两者完全不在同一个级别,下面我先来介绍PHP CURL或file_get_contents函 ...
- curl 或 file_get_contents 获取需要授权页面的方法
原文:http://blog.csdn.net/fdipzone/article/details/44475801 红色字体部分是加上自己的注释,整理了一下. 今天因工作需要,需要用 curl / f ...
- PHP模拟POST请求,获取response内容
/* * 模拟POST请求,获取response内容 */ protected function curl($url, $type, $header, $data) { $CURL_OPTS = ar ...
随机推荐
- 本地域名解析知识hosts
get(本地域名解析知识点): Domain Name System: 域名系统 目的:互联网通过IP(10.223.146.45)定位浏览器建立连接,但是我们不易区别IP,为了方便用户辨识IP所代表 ...
- C# WebBrowser的DrawToBitmap方法 截取网页保存为图片
bool mark = true; private void btnOpen_Click(object sender, EventArgs e) { ...
- 北京Uber优步司机奖励政策(1月4日)
滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...
- 成都Uber优步司机奖励政策(1月27日)
滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...
- java 类装饰
package TestIo; public class Test8 { public static void main(String[] args) { System.out.println(&qu ...
- Linux 下获取通讯IP
#!/bin/sh # filename: get_net.sh default_route=$(ip route show) default_interface=$() address=$(ip a ...
- 无法嵌入互操作类型“ADOX.CatalogClass”。请改用适用的接口。
编译环境:vs2013 系统报错:无法嵌入互操作类型"ADOX.CatalogClass".请改用适用的接口. 解决方法:选中项目中引入的dll(本例中为Microsoft ADO ...
- android分析windowManager、window、viewGroup之间关系(一)
本文将主要介绍addview方法,在windowManager.window.viewGroup中的实现原理.首先将介绍这些类结构关系,然后分析其内在联系,介绍实现原理,最后介绍重要的一个参数wind ...
- WEB中间件漏洞--IIS
1.iis安装 版本 一直下一步,选上iis安装 端口修改 网站目录 通过网站发布目录(发布目录任意),新建index.html页面,可以正常访问 2.iis6.0解析漏洞 (1)文件名解析 IIS在 ...
- Objective-C 类和对象
面向对象 面向对象(Object-Oriented)是基于面向过程(procedure-oriented)而言的 面向对象 强调对象<指挥者> OC, Java语言就是面向对象 面向过程 ...