利用PHP实现http数据提交的几种方式

利用PHP实现http的get或post数据提交有多种方式,我们可以根据不同的环境来选择不同的实现,下面就简单介绍一下利用PHP实现http数据提交的几种方式.

header函数重定向实现http数据提交

 
这种方式简单易行,但也有弊端,就是在执行header()函数之前不能有任何输出(不过这种方式我们可以使用php缓冲输出函数进行控制),既然已经重 定向了,那我们就无法返回到我们刚才的页面,也无法控制它的执行流程,如果对于这方面没有什么要求的话,我们就可以直接使用header()函数来进行参 数提交.
下面是一个简单例子:

header("Location:http://www.hongxincao.com/login.php?username=admin&password=password");

 

手动构造http数据包实现http数据提交

 
这种方式一般不建议使用,除非是特别要求或必须应用时再使用,手动构造的http头数据的方式比较麻烦,而且实现起来代码也比较多.我只有在利用其他方式 实在无法实现的情况下才使用这种提交方式,不过我们可以先利用网络数据抓包工具抓取到提交的http头和数据内容,然后我们直接根据其进行构造即可.
其基本流程就是使用fsockopen函数连接到要提交的服务器,然后我们手动构造http头及提交的数据,利用fputs和fgets函数来进行数据的提交并获取到返回数据.
下面是一个简单的样例函数,可以参考一下.

function auth_user_info($url,$host,$port,$tokenid,$appid) {
 $str_var = '这里是要POST提交的数据';
        //sockopen连接80端口进行提交
        $fp = fsockopen($host, $port, &$errno, &$errstr, $timeout);
        if ( $fp == false ) {
            return false;
        }
        //下面是提交的http头内容,你修改为对应的内容即可
        fputs($fp, "POST $url HTTP/1.0/r/n");
        fputs($fp, "Accept-Encoding: gzip,deflate/r/n");
        fputs($fp, "Content-Type: application/x-www-form-urlencoded/r/n");
        fputs($fp, "SOAPAction: /r/n");
        fputs($fp, "User-Agent: Jakarta Commons-HttpClient/3.1/r/n");
        fputs($fp, "Host: $host/r/n");
        fputs($fp, "Content-Length: ".strlen($str_var)."/r/n");
        fputs($fp, "/r/n");
        fputs($fp, "$str_var/r/n");
      while( $line = fgets($fp, 4096) ) {
         if ( $h == true && ($line == "/r" || $line == "/n" || $line == "/r/n"
|| $line == "/n/r") ) {
              $h = false;
         } else if ( $h == true ) {
              $head .= $line;
         } else {
              $body .= $line;
         }
      }
 //$body里面保存的就是http返回的数据,包括http头和数据内容,你可以接下来按需要进行处理分析.
}

php的curl函数库实现http数据提交

 
在我看来,这应该是最方便且功能强大的实现方式了,curl库函数库的功能十分强大,它支持 FTP,FTPS,HTTP,HTTPS,SCP,SFTP,TFTP,LDAP等多种网络协议,支持SSL证书,HTTP POST,HTTP PUT,FTP上传,基于HTTP格式的上传,代理,Cookie,用户+口令验证,文件传输恢复,HTTP代理通道和大量有用的技巧,关于curl函数 的说明在这里不可能一下子全部说完,稍后我会整理一篇关于curl函数的说明或者大家在网络上一搜就全部出来了.
curl函数对做网站采集的朋友来说也是福音,如果你能掌握curl库函数的相关使用,那你绝对能够成为一个采集数据的高手,而且是高手中的高手,由此可见其强大之处了.
下面是几个简单样例函数:

//该函数用于返回http提交后返回的数据
function getip($web,$data)
{
        $ch = curl_init();
        curl_setopt($ch,CURLOPT_POST,1);
        curl_setopt($ch,CURLOPT_URL,$web);
        curl_setopt($ch,CURLOPT_POSTFIELDS,$data);
        ob_start();
        curl_exec($ch);
        $res = ob_get_contents();
        ob_end_clean();
        return $res;
}
//该函数只是用于验证http提交十分正常,返回数据十分正确
function curl_send($data)
{
        global $URL_HOME;
        $url = "/action";
        $ch = curl_init();
        curl_setopt($ch,CURLOPT_URL,$URL_HOME.$url);
        curl_setopt($ch,CURLOPT_POST,1);
        curl_setopt($ch,CURLOPT_HEADER,true);
        curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
        curl_setopt($ch,CURLOPT_POSTFIELDS,$data);
        $head = curl_exec($ch);
        curl_close($ch);
        $head = split("(/r|/n)+", $head);
        while( list($k, $v) = each($head) ) {
                if ( preg_match("/^HTTP//1/.(0|1) ([0-9]+)/", $v, $m ) ) {
                        $http_code = $m[2];
                }
                else if ( preg_match("/^code: (.+)/", $v, $m ) ) {
                        $code = $m[1];
                }
                else if ( preg_match("/^str: (.+)/", $v, $m ) ) {
                $str = $m[1];
                }
        }
        return $code;
}

 原创文章,转载请注明来源: 红心草博客
原文地址: http://www.hongxincao.com/archives/170.html

后记
   关于php进行http数据提交的内容就简单介绍到这里,如果有朋友感兴趣或有什么更好的方式都可以给我留言,我们共同探讨和学习.

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值