php发送get,post请求学习

来源:互联网 发布:gts250输出端口有哪些 编辑:程序博客网 时间:2024/04/25 01:20

学习http://blog.csdn.net/haha00217/article/details/7969504

在看thinkphp代码看到php://input不知道是什么东西.......搜了下,说是输入流,感觉好高端.....

再看下讲解的例子,涉及到了php发送http请求的知识,以前没用过啊,赶紧看看~~~~看的上面网址大神的微博,本来直接转载就行了,但还是想自己记录下

一,用file_get_contents来发送get以get方式接受

<span style="font-size:18px;"><span style="font-size:18px;"><?php$url='http://localhost/mytest/tset.php';$html=file_get_contents($url);var_dump($html);?></span></span>

二, 用fopen打开url, 以get方式获取内容

<span style="font-size:18px;"><span style="font-size:18px;"><?php$url='http://localhost/mytest/tset.php';//php手册上说是把资源绑定到一个流上面,成功之后返回文件指针资源$html=fopen($url, 'r');//这个函数会返回当前协议文件中取得一些信息(php手册上这样说,我自己把这个理解成取得当前请求的一些信息,比如请求是否成功,服务器版本啊之类的信息)var_dump(stream_get_meta_data($html));$str='';//因为$html是一个指针资源,不能直接输出,所以要使用下面的循环来取出,类似于从数据库取出资源//循环,没到文件结尾就循环feof检测是否到达文件指针结尾while (!feof($html)) {    //从文件指针中读取后面设置的字节    $str.=fgets($html,1024);}var_dump($str);//关闭已经打开的文件指针,免得占用资源,感觉和mysql连接一样,不用的时候要关掉~~~fclose($html);?></span></span>

三,用file_get_contents函数,以post方式获取

<span style="font-size:18px;"><span style="font-size:18px;"><?php$url='http://localhost/mytest/tset.php';//要传递的参数$data=array('boo'=>'bar');//这个函数是可以把数组转换成boo=bar形式,现在参数很少所以没什么,但是参数多的话用这个函数很方便(应该是这个作用吧~~)$data=http_build_query($data);//http请求的参数,注意header项的值要用双引号,不然\r\n不会被解析成换行符,会影响传值,别的影响没遇到,不知道$options=array(    'http'=>array(            'method'=>'POST',            'header'=>"Content-type: application/x-www-form-urlencoded\r\n"."Content-Length: " . strlen($data) . "\r\n",            'content' => $data    ));//创建一个上下文资源流$content=stream_context_create($options);//发送请求第一个参数是文件位置,改成false和true没什么影响啊,第三个就是http请求头以及一些设置选项了$html=file_get_contents($url,true,$content);var_dump($html);?></span></span>
四,用fsockopen函数

老是报错........先不管这个了...

弄好了

post

<span style="font-size:18px;"><pre name="code" class="php"><?php//@file phpinput_post.php//要传递的参数$http_entity_body = 'n=' . urldecode('perfgeeks') . '&p=' . urldecode('7788');//应该是请求发送给接受者的实体正文类型$http_entity_type = 'application/x-www-form-urlencoded';//正文的长度$http_entity_length = strlen($http_entity_body);$host = '127.0.0.1';$port = 80;$path = 'http://localhost/mytest/tset.php';//依次是,主机,端口,错误号,错误信息,过期时间,这步好像没发请求$fp = fsockopen($host, $port, $error_no, $error_desc, 30);if ($fp) {    //写协议内容。。。页面地址fputs($fp, "POST {$path} HTTP/1.1\r\n");//主机fputs($fp, "Host: {$host}\r\n");//请求正文类型fputs($fp, "Content-Type: {$http_entity_type}\r\n");//正文长度fputs($fp, "Content-Length: {$http_entity_length}\r\n");//这个不知道....fputs($fp, "Connection: close\r\n\r\n");//发送的数据fputs($fp, $http_entity_body . "\r\n\r\n");$d='';//取出数据while (!feof($fp)) {$d .= fgets($fp, 4096);}//关闭连接fclose($fp);//直接输出会输出http协议信息,所以做一些处理//先从http协议中计算出正文的长度preg_match('/Content-Length: (\d+)/', $d, $maths );//var_dump($maths[1]);//用字符串的总长度减去正文的长度就是http协议的长度了,再用substr截取就ok了$d=substr($d,strlen($d)-(int)$maths[1]);//输出请求结果echo $d;}?></span>

get

<span style="font-size:18px;"><?php//@file phpinput_post.php//要传递的参数$http_entity_body = 'n=' . urldecode('perfgeeks') . '&p=' . urldecode('7788');$host = '127.0.0.1';$port = 80;$path = 'http://localhost/mytest/tset.php';//依次是,主机,端口,错误号,错误信息,过期时间,这步好像没发请求$fp = fsockopen($host, $port, $error_no, $error_desc, 10);if ($fp) {    //写协议内容。。。页面地址fputs($fp, "GET {$path}?{$http_entity_body} HTTP/1.1\r\n");//主机fputs($fp, "Host: {$host}\r\n");//这个不知道....fputs($fp, "Connection: close\r\n\r\n");$d='';//取出数据while (!feof($fp)) {$d .= fgets($fp, 4096);}//关闭连接fclose($fp);//直接输出会输出http协议信息,所以做一些处理//先从http协议中计算出正文的长度preg_match('/Content-Length: (\d+)/', $d, $maths );//var_dump($maths[1]);//用字符串的总长度减去正文的长度就是http协议的长度了,再用substr截取就ok了//$d=substr($d,strlen($d)-(int)$maths[1]);//输出请求结果echo $d;}?></span>



五,使用curl库,使用curl库之前,可能需要查看一下php.ini是否已经打开了curl扩展

<span style="font-size:18px;"><span style="font-size:18px;"><?php//初始化一个curl回话(感觉就是实例化了一个对象。。)$cu=curl_init();$timeout=30;//设置一个curl回话的传输选项,有很多选项可以设置,这里就不一一设置了curl_setopt($cu, CURLOPT_URL, 'http://localhost/mytest/tset.php');//设置值为"1"成功会返回请求页面的内容,设置为"0"成功会返回1curl_setopt($cu, CURLOPT_RETURNTRANSFER, 1);curl_setopt($cu, CURLOPT_CONNECTTIMEOUT, $timeout);$res=curl_exec($cu);echo $res;?></span></span>
curl好简单.....而且好像性能也是最强的~~~






0 0
原创粉丝点击