php模拟http请求的方法
我在这里终结了三种方法
第一种方法:fsockopen
$flag = 0;
$post = '';
$errno = '';
$errstr = '';
//要post的数据
$argv = array(
'username'=>'vic',
'content'=>'how are you , my friend?'
); //构造要post的字符串
foreach ($argv as $key=>$value) {
if ($flag!=0) {
$post .= "&";
$flag = 1;
}
$post.= $key."="; $post.= urlencode($value);
$flag = 1;
}
$length = strlen($post); //创建socket连接
$fp = fsockopen("www.test.com",80,$errno,$errstr,10) or exit($errstr."--->".$errno); //构造post请求的头
$header = "POST /mysql.php HTTP/1.1\r\n";
$header .= "Host:www.test.com\r\n";
$header .= "Referer:/index.php\r\n";
$header .= "Content-Type: application/x-www-form-urlencoded\r\n";
$header .= "Content-Length: ".$length."\r\n";
$header .= "Connection: Close\r\n\r\n";
//添加post的字符串
$header .= $post."\r\n"; //发送post的数据
fputs($fp,$header);
$inheader = 1;
while (!feof($fp)) { $line = fgets($fp,1024); //去除请求包的头只显示页面的返回数据
if ($inheader && ($line == "\n" || $line == "\r\n")) { $inheader = 0;
}
if ($inheader == 0) {
echo $line;
}
} fclose($fp); $html=file_get_contents("http://www.baidu.com");
echo $html;
第二种方法:stream_context_create()
$data=array('nickname'=>'yonghuming','Email'=>'假的');
$data=http_build_query($data);
//var_dump($data);
$strlen=strlen($data);
$opts=array('http'=>array(
'method'=>'POST',
'header'=>"Content-Type:application/x-www-form-urlencoded"."\r\n"."Content-Length:".$strlen."\r\n"."User-Agent:Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36"."\r\n"."Referer:http://www.test.com/stream.php"."\r\n",
'content'=>$data
));
$context=stream_context_create($opts);
//var_dump($opts);
$html=@file_get_contents("http://www.test.com/mysql.php",false,$context);
echo $html;
第三种方法:curl
//初始化
$ch=curl_init();
//设置选项
curl_setopt($ch, CURLOPT_URL, "http://www.test.com/post.php");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//文件流输出,不是直接输出
curl_setopt($ch, CURLOPT_HEADER, 0);//启用时,头文件信息作为数据流输出 $data=array('nickname'=>'yonghuming','Email'=>'假的');
$data=http_build_query($data);
//var_dump($data);
$strlen=strlen($data);
//curl已经模拟了头部信息,如不是特需要求,可以不需要的
/*$header=array("Content-Type:application/x-www-form-urlencoded","Content-Length:".$strlen,"User-Agent:Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36","Referer:http://www.test.com/stream.php");
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);//模拟头部信息*/
//设置post请求
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false); //当请求https开头的时候,需要走php接口文件就需要走443端口,故false进行屏蔽。是否检测服务器的证书是否由正规浏览器认证过的授权CA颁发的
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
//设置cookie
$cookie_jar = dirname(__FILE__)."/pic.cookie";
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_jar);// 存放Cookie信息的文件名称
curl_setopt($ch,CURLOPT_COOKIEFILE,$cookie_jar); // 读取上面所储存的Cookie信息
curl_setopt($ch,CURLOPT_COOKIE,'age=12');//单独设置cookie,如何不用上面的两个方法
//3.执行
$output=curl_exec($ch);
//4.释放
curl_close($ch); //var_dump($output);
echo $output;
post.php文件
echo '<pre>';
echo "this is the data posted";
setcookie('name','vic');
print_r($_POST);
print_r($_COOKIE);
echo '</pre>';
结果
this is the data postedArray
(
[nickname] => yonghuming
[Email] => 假的
)
Array
(
[name] => vic
[age] => 12
)
总结:php请求基本上此三种方法就可以了,此只是非常简单的入门,复杂的等以后再来总结吧。
php模拟http请求的方法的更多相关文章
- postman模拟HttpPost请求的方法
开始想装postman的Google浏览器插件的,但是发现应用商店无法搜索,下载的拖进扩展也装不上... 于是找到了这个绿色版的Postman桌面程序!有需要的可以下载,点击下载:http://dow ...
- chrome 模拟发送请求的方法
chrome f12 看到了web页面的请求,有时候想修改一下参数重新执行一下怎么办? 如果是get方法.参数不多可以直接在浏览器中打开.否则post方法参数多时很多人会复制到postman中执行,但 ...
- ASP模拟POST请求异步提交数据的方法
这篇文章主要介绍了ASP模拟POST请求异步提交数据的方法,本文使用MSXML2.SERVERXMLHTTP.3.0实现POST请求,需要的朋友可以参考下 有时需要获取远程网站的某些信息,而服务器又限 ...
- java模拟post请求发送json
java模拟post请求发送json,用两种方式实现,第一种是HttpURLConnection发送post请求,第二种是使用httpclient模拟post请求, 方法一: package main ...
- C# 通过模拟http请求来调用soap、wsdl
C#调用webservice的方法很多,我说的这种通过http请求模拟来调用的方式是为了解决C#调用java的远程API出现各种不兼容问题. 由于远程API不在我们的控制下,我们只能修改本地的调用代码 ...
- HttpClient方式模拟http请求设置头
关于HttpClient方式模拟http请求,请求头以及其他参数的设置. 本文就暂时不给栗子了,当作简版参考手册吧. 发送请求是设置请求头:header HttpClient httpClient = ...
- HttpClientUtil [使用apache httpclient模拟http请求]
基于httpclient-4.5.2 模拟http请求 以get/post方式发送json请求,并获取服务器返回的json -------------------------------------- ...
- 使用 jQuery Mockjax 插件模拟 Ajax 请求
在实际的开发过程中,前端后台协商好了统一的接口,就各自开始自己的任务了.这时候我有这么一个 Ajax 请求需要从后台获取数据: $.ajax({ url: '/products/' }).done(f ...
- 一步步教你为网站开发Android客户端---HttpWatch抓包,HttpClient模拟POST请求,Jsoup解析HTML代码,动态更新ListView
本文面向Android初级开发者,有一定的Java和Android知识即可. 文章覆盖知识点:HttpWatch抓包,HttpClient模拟POST请求,Jsoup解析HTML代码,动态更新List ...
随机推荐
- 可跨域的单点登录(SSO)实现方案【附.net代码】
SSO简介 定义: 传统的单站点登录访问授权机制是:登录成功后将用户信息保存在session中,sessionId保存在cookie中,每次访问需要登录访问的资源(url)时判断当前session是否 ...
- PHP的性能大坑--strtotime函数
最近在做一个游戏数据统计后台,最基础的功能是通过分析注册登录日志来展示用户数据.在公司内部测试,用户量很少,所以就没有发现什么性能问题.但是这两天一起放到真实的测试环境,用户量噌噌地就涌进来了,从下午 ...
- linux的常用文件系统格式
文件系统指文件存在的物理空间.在Linux系统中,每个分区都是一个文件系统,都有自己的目录层次结构.Linux的最重要特征之一就是支持多种文件系统,这样它更加灵活,并可以和许多其它种操作系统共存.Vi ...
- ASP.NET 正则替换URL参数值
public class HomeController : Controller { public ActionResult Index() { var url = "http://www. ...
- HTML 全局属性
http://www.w3school.com.cn/tags/html_ref_standardattributes.asp
- maven: 基本使用
1.项目管理工具:Maven的repository,说白了就是dependency的仓库,它按照一定的规则将dependency存放起来,以作缓存,如果本机的 repository找不到某个depen ...
- 关于push数组,然后遍历数组遇到的坑,遍历显示函数
我偷了个懒将点击的东西push进一个arr里,然后遍历显示在上面. 为啥子出现了上函数,什么鬼什么鬼.我检查很久都不晓得那里push进去的. 一个小时后,我想想要不看看arr里面的结构吧! 尼玛!为啥 ...
- Frida HOOK微信实现骰子作弊
由于微信摇骰子的功能在本地进行随机后在发送,所以存在可以hook掉判断骰子数的方法进行修改作弊. 1.frida实现hook java层函数1)写个用来测试的demo,当我们点击按钮的时候会弹出窗口显 ...
- Theano printing
Theano printing To visualize the internal relation graph of theano variables. Installing conda insta ...
- 浅谈Android样式开发之View Animation (视图动画)
引言 一个用户体验良好的App肯定少不了动画效果.Android为我们提供了2种动画框架,分别是视图动画(View Animation)和属性动画(Property Animation).视图动画比较 ...