我在这里终结了三种方法

第一种方法: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请求的方法的更多相关文章

  1. postman模拟HttpPost请求的方法

    开始想装postman的Google浏览器插件的,但是发现应用商店无法搜索,下载的拖进扩展也装不上... 于是找到了这个绿色版的Postman桌面程序!有需要的可以下载,点击下载:http://dow ...

  2. chrome 模拟发送请求的方法

    chrome f12 看到了web页面的请求,有时候想修改一下参数重新执行一下怎么办? 如果是get方法.参数不多可以直接在浏览器中打开.否则post方法参数多时很多人会复制到postman中执行,但 ...

  3. ASP模拟POST请求异步提交数据的方法

    这篇文章主要介绍了ASP模拟POST请求异步提交数据的方法,本文使用MSXML2.SERVERXMLHTTP.3.0实现POST请求,需要的朋友可以参考下 有时需要获取远程网站的某些信息,而服务器又限 ...

  4. java模拟post请求发送json

    java模拟post请求发送json,用两种方式实现,第一种是HttpURLConnection发送post请求,第二种是使用httpclient模拟post请求, 方法一: package main ...

  5. C# 通过模拟http请求来调用soap、wsdl

    C#调用webservice的方法很多,我说的这种通过http请求模拟来调用的方式是为了解决C#调用java的远程API出现各种不兼容问题. 由于远程API不在我们的控制下,我们只能修改本地的调用代码 ...

  6. HttpClient方式模拟http请求设置头

    关于HttpClient方式模拟http请求,请求头以及其他参数的设置. 本文就暂时不给栗子了,当作简版参考手册吧. 发送请求是设置请求头:header HttpClient httpClient = ...

  7. HttpClientUtil [使用apache httpclient模拟http请求]

    基于httpclient-4.5.2 模拟http请求 以get/post方式发送json请求,并获取服务器返回的json -------------------------------------- ...

  8. 使用 jQuery Mockjax 插件模拟 Ajax 请求

    在实际的开发过程中,前端后台协商好了统一的接口,就各自开始自己的任务了.这时候我有这么一个 Ajax 请求需要从后台获取数据: $.ajax({ url: '/products/' }).done(f ...

  9. 一步步教你为网站开发Android客户端---HttpWatch抓包,HttpClient模拟POST请求,Jsoup解析HTML代码,动态更新ListView

    本文面向Android初级开发者,有一定的Java和Android知识即可. 文章覆盖知识点:HttpWatch抓包,HttpClient模拟POST请求,Jsoup解析HTML代码,动态更新List ...

随机推荐

  1. 可跨域的单点登录(SSO)实现方案【附.net代码】

    SSO简介 定义: 传统的单站点登录访问授权机制是:登录成功后将用户信息保存在session中,sessionId保存在cookie中,每次访问需要登录访问的资源(url)时判断当前session是否 ...

  2. PHP的性能大坑--strtotime函数

    最近在做一个游戏数据统计后台,最基础的功能是通过分析注册登录日志来展示用户数据.在公司内部测试,用户量很少,所以就没有发现什么性能问题.但是这两天一起放到真实的测试环境,用户量噌噌地就涌进来了,从下午 ...

  3. linux的常用文件系统格式

    文件系统指文件存在的物理空间.在Linux系统中,每个分区都是一个文件系统,都有自己的目录层次结构.Linux的最重要特征之一就是支持多种文件系统,这样它更加灵活,并可以和许多其它种操作系统共存.Vi ...

  4. ASP.NET 正则替换URL参数值

    public class HomeController : Controller { public ActionResult Index() { var url = "http://www. ...

  5. HTML 全局属性

    http://www.w3school.com.cn/tags/html_ref_standardattributes.asp

  6. maven: 基本使用

    1.项目管理工具:Maven的repository,说白了就是dependency的仓库,它按照一定的规则将dependency存放起来,以作缓存,如果本机的 repository找不到某个depen ...

  7. 关于push数组,然后遍历数组遇到的坑,遍历显示函数

    我偷了个懒将点击的东西push进一个arr里,然后遍历显示在上面. 为啥子出现了上函数,什么鬼什么鬼.我检查很久都不晓得那里push进去的. 一个小时后,我想想要不看看arr里面的结构吧! 尼玛!为啥 ...

  8. Frida HOOK微信实现骰子作弊

    由于微信摇骰子的功能在本地进行随机后在发送,所以存在可以hook掉判断骰子数的方法进行修改作弊. 1.frida实现hook java层函数1)写个用来测试的demo,当我们点击按钮的时候会弹出窗口显 ...

  9. Theano printing

    Theano printing To visualize the internal relation graph of theano variables. Installing conda insta ...

  10. 浅谈Android样式开发之View Animation (视图动画)

    引言 一个用户体验良好的App肯定少不了动画效果.Android为我们提供了2种动画框架,分别是视图动画(View Animation)和属性动画(Property Animation).视图动画比较 ...