文档章节

php http 请求类

gggjjj
 gggjjj
发布于 2015/09/16 07:54
字数 539
阅读 12
收藏 0
//调用方法
require 'cls_php.php';
$httpRequest = new cls_http();
$url="http://localhost/post.php";
$parameters = array(
    username =>'user1',
    password => 'passwd1'
);
$returnContent=$httpRequest->Http($url,'POST',$parameters);
print($returnContent);
<?php
class cls_http
{
    public $errorMsg = array();
    public $httpStateCode;
    public $url;
    public $timeOut = 30;
    public $connectTimeOut = 30;
    public $sslVerifyPeer = false;
    public $httpInfo;
    public static $boundArray = '';

    function Http($url,$method = 'GET',$parameters = array(),$multi = false)
    {
        switch ($method)
        {
            case 'GET':
                if (!empty($parameters))
                {
                    $url = $url .'?'.http_build_query($parameters);
                }
                return $this->httpRequest($url, $method);
                break;
            case 'POST':
                if(is_array($parameters))
                {
                    $body = $this->GetParams($parameters);
                }
                else
                {
                    $body=$parameters;
                }
                return $this->HttpRequest($url, $method,$body);
                break;
            default:
                $headerArray = array();
                if(   !$multi && ( is_array($parameters) || is_object($parameters) )   )
                {
                    $body = http_build_query($parameters);
                } 
                else
                {
                    $body = self::Build_http_query_multi($parameters);
                    $headerArray[] = "Content-Type: mutipart/form-data;boundArray=".self::$boundArray; 
                }
                return $this->HttpRequest($url, $method,$body,$headerArray);
                break;

        }
    }

    function HttpRequest ($url,$method,$postFields = NULL,$headerArray = array()) 
    {
        if(!function_exists('curl_init'))  
        {
            if(function_exists('fsockopen'))  
            {
                 $responseContent = $this->FsockRequest($url, $method,$postFields,$headerArray);
                 return $responseContent;
            }
            return false;
        }
        
        $this->httpInfo=array();
        $ch = curl_init();        
        $options = array(
            CURLOPT_CONNECTTIMEOUT => $this->connectTimeOut ,
            CURLOPT_TIMEOUT  => $this->timeOut,
            CURLOPT_RETURNTRANSFER => TRUE,
            CURLOPT_ENCODING => '',
            CURLOPT_SSL_VERIFYPEER => $this->sslVerifyPeer,
            CURLOPT_HEADERFUNCTION => array($this,'getHeader'),
            CURLOPT_HEADER,FALSE
        );        
        curl_setopt_array($ch, $options);
        
        if ($method == 'POST')
        {
                if(!empty($postFields))
                {
                    curl_setopt($ch, CURLOPT_POST, TRUE );
                    curl_setopt($ch, CURLOPT_POSTFIELDS, $postFields);
                    $this->postData = $postFields;
                }                
        }
        curl_setopt($ch, CURLOPT_URL, $url );
        curl_setopt($ch, CURLOPT_HTTPHEADER, $headerArray );
        curl_setopt($ch, CURLINFO_HEADER_OUT, TRUE );
        
        $responseContent = curl_exec($ch);
        $this->httpStateCode = curl_getinfo($ch,CURLINFO_HTTP_CODE);     
        $this->httpInfo = array_merge($this->httpInfo,curl_getinfo($ch));
        $this->url=$url;
        curl_close($ch);
        
        return $responseContent;
        
    }
    
    /**
     * Get the header info to store.
     *
     * @return int
     * @ignore
     */
    function getHeader($ch, $header) {
        $i = strpos($header, ':');
        if (!empty($i)) {
            $key = str_replace('-', '_', strtolower(substr($header, 0, $i)));
            $value = trim(substr($header, $i + 2));
            $this->http_header[$key] = $value;
        }
        return strlen($header);
    }
    
    public static function Build_http_query_multi($params)
    {
        if(!$params) return '';
        uksort($params,'strcmp');
        $pairs = array();
        
        self::$boundArray = $boundArray = uniqid('-----------------');
        $MPboundArray = '--'.$boundArray;
        $endMPboundArray = $MPboundArray . '--';
        $multipartbody = '';
        
        foreach ($params as $parameter => $value)
        {
            if (in_array($parameter,array('pic','image')) && $value{0} == '@')
            {
                    $url = ltrim( $value, '@' );
                    $content = file_get_contents( $url );
                    $array = explode( '?', basename( $url ) );
                    $filename = $array[0];
    
                    $multipartbody .= $MPboundArray . "\r\n";
                    $multipartbody .= 'Content-Disposition: form-data; name="' . $parameter . '"; filename="' . $filename . '"'. "\r\n";
                    $multipartbody .= "Content-Type: image/unknown\r\n\r\n";
                    $multipartbody .= $content. "\r\n";
            } 
            else 
            {
                    $multipartbody .= $MPboundArray . "\r\n";
                    $multipartbody .= 'content-disposition: form-data; name="' . $parameter . "\"\r\n\r\n";
                    $multipartbody .= $value."\r\n";
            }
        }
        $multipartbody .= $endMPboundArray;
        return $multipartbody;
    }
    
    function GetParams($p)
    {
        $str = '';
        foreach ($p as $key => $value)
        {
            if(isset($str{1}))
            {
                $str .= '&';
            }
            $str .= $key .'='.$value;
        }
        return $str;        
    }

    function FsockRequest($url,$method,$postFields = NULL,$headerArray = array())
    {
        $urlArray = parse_url($url); //解析 URL,返回其组成部分

        $errNo    = '';
        $errStr = '';
        $transPorts = '';
        $responseContent = '';

        if ($urlArray['schme'] === 'https')
        {
            $transPorts = 'ssl://';
            $urlArray['port'] = '443';
        }
        else
        {
            $transPorts = 'tcp://';
            $urlArray['port'] = '80';
        }
        
        $fp = fsockopen($transPorts.$urlArray['host'],$urlArray['port'],$errNo,$errStr,$this->timeOut);
        if(!$fp){
            die("ERROR:$errNo -". $errStr);
            return false;
        }
        else {
            if(!empty($urlArray['query']))
            {
                $urlArray['path'] .= '?'.$urlArray['query'];
            }
            $urlArray['method'] = $method;
            $header = $method.' '.$urlArray['path']." HTTP/1.1\r\n";
            
            if ($method == 'POST')
            {
                $header .= "Content-type: application/x-www-form-urlencoded\r\n";
                $header .= "Content-length: ".strlen($postFields)."\r\n";
            }
            
            $header .= 'Host: '.$urlArray['host']."\r\n";
            $header .=  "Connection: close\r\n\r\n";
            
            fputs($fp,$header);
            if($method == 'POST')
            {
                fputs($fp,$postFields."\r\n\r\n");
            }
            
            while(!feof($fp)){
                $responseContent .= @fgets($fp,4096);
            }
            
            fclose($fp);    
            $responseContent =substr( stristr($responseContent,"\r\n\r\n"),strlen("\r\n\r\n"));            

            return $responseContent;            
            
        }
        

    }


}
?>


© 著作权归作者所有

共有 人打赏支持
gggjjj
粉丝 2
博文 27
码字总数 9186
作品 0
石家庄
私信 提问
HTTPOXY漏洞说明

19 Jul 16 HTTPOXY漏洞说明 作者: Laruence( ) 本文地址: http://www.laruence.com/2016/07/19/3101.html 转载请注明出处 好久没写文章了, 博客都长草了, 早上起来本来想去上班, 一看这么...

Laruence
2017/12/21
0
0
Modern PHP 笔记(一)

现在正式加入世界上最好的语言大家庭了。jimbochen大佬给推荐了 Josh Lockhart 写的,安道翻译的《Modern PHP》. 准备记录下一些学习笔记。刚刚入坑,如果理解的不对,欢迎指出。 这本书刚看...

郝开心信札
2017/11/22
0
0
Opensearch PHP SDK协程兼容改造

摘要 本文简单的介绍了协程的概念及基本原理,以及协程在PHP中的一种实现方案(PECL/Swoole)。最后,结合Opensearch PHP SDK的协程改造过程演示了具体的使用方法。 协程 与进程、线程一样,...

timandes
2018/10/24
0
0
symfony学习笔记1—简介

1.symfony快速入门 还是先看代码结构把,这个是拿到代码的第一印象, app/:整个应用的配置,模版,translations,这个可能是多语言文件什么, src/:项目php文件, vendor/:第三方的依赖文...

ndblog
2015/05/12
0
0
使用PHP Socket 编程模拟Http post和get请求

这里给大家分享一段使用PHP Socket 编程模拟Http post和get请求的代码,非常的实用,结尾部分我们再讨论下php模拟http请求的几种方法。 php 模拟 http请求 方法一:利用php的socket编程来直接...

JK_OPERA
2018/07/31
0
0

没有更多内容

加载失败,请刷新页面

加载更多

输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。

import java.util.Stack; public class Solution { public boolean IsPopOrder(int [] pushA,int [] popA) { if(pushA.length==0||popA.length==0) return false; Stack......

南桥北木
22分钟前
0
0
互联网浪潮下,Java程序员如何追赶技术革新的脚步?

一:时代背景 身处互联网行业的我们一直处在变革的最前端,受到行业发展浪潮的洗礼,不停歇地追赶着技术革新的脚步。特别是近几年来, 互联网架构不断演化,经历了从集中式架构到分布式架构,...

老道士
29分钟前
0
0
flink系列(9)-flink启动流程分析

连续写了几天的flink StreamGraph的代码,今天闲来说一下flink的启动

yiduwangkai
42分钟前
0
0
取变量的地址赋值给另一个变量,C通过,C++编译出错

取变量的地址赋值给另一个变量,C通过。正常运行,C++编译出错。 代码如下: #include <stdio.h>int main(int argc, char *argv[]){int x = 3;int *p = &x;int y = p;/*c ...

SamXIAO
今天
1
0
利用隐写术实施攻击

尽管隐写术是一种低频攻击途径,但网络犯罪分子已经开始利用它结合社交媒体的普遍性和快速传播性来传递恶意有效负载。 低调但有效的隐写技术虽然是旧把戏,但将代码隐藏在看似正常的图像中,...

Linux就该这么学
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部