php http 类,php写的http请求封装类

本文介绍一个php实现的http请求封装类,封装了三种post提交方法和一个request请求方法,并提供了调用示例,供大家学习参考。

在php编程调试时,经常需要模拟提交。

另外,在抓取一些页面时,需要经常请求别人的页面。

于是实现了一个http请求的封装类,以方便调用。

本http请求类,封装了三种post提交方法和一个request请求方法。

1,http请求封闭类

0)

{

$this->init($params);

}

}

// -----------------------

/**

* 参数初始化

*

* @param array $params

*/

public function init($params)

{

if(count($params) > 0)

{

foreach($params as $key => $val)

{

if(isset($this->$key))

{

$this->$key = $val;

}

}

}

}

// -----------------------

/**

* 提交请求

*

* @param string $url 请求地址

* @param mixed $data 提交的数据

* @param string $type 提交类型,curl,socket,stream可选

*/

public function post($url, $data, $type = "socket")

{

if(!in_array($type, $this->post_type_list))

{

die("undefined post type");

}

$function_name = $type . "Post";

return call_user_func_array(array($this, $function_name), array($url, $data));

}

// -----------------------

/**

* 更改默认的ua信息

*

* 本方法常用于模拟各种浏览器

*

* @param string $ua_string UA字符串

*/

public function setUA($user_agent)

{

$this->ua_string = $user_agent;

return $this;

}

// -----------------------

/**

* 设置本地cookie文件

*

* 在用curl来模拟时常需要设置此项

*

* @param string $cookie_file 文件路径

*/

public function setCookieFile($cookie_file)

{

$this->cookie_file = $cookie_file;

return $this;

}

// -----------------------

/**

* curl方式提交

*

* @param string $url 请求地址

* @param mixed $data 提交的数据

* @param string $user_agent 自定义的UA

* @return mixed

*/

public function curlPost($url, $data, $user_agent = '')

{

if($user_agent == '')

{

$user_agent = $this->ua_string;

}

if (!is_array($data))

{

$data = array($data);

}

$data = http_build_query($data);

if (!function_exists("curl_init"))

{

die('undefined function curl_init');

}

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $url);

curl_setopt($ch, CURLOPT_POST, true);

curl_setopt($ch, CURLOPT_POSTFIELDS, $data);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

curl_setopt($ch, CURLOPT_USERAGENT, $user_agent);

$rs = curl_exec($ch);

curl_close($ch);

return $rs;

}

// -----------------------

/**

* 套接字提交

*

* @param string $url 请求地址

* @param mixed $data 提交的数据

* @param string $user_agent 自定义的UA

* @param int $port 端口

* @param int $timeout 超时限制

* @return mixed

*/

public function socketPost($url, $data, $user_agent = '', $port = 80, $timeout = 30)

{

$url_info = parse_url($url);

$remote_server = $url_info['host'];

$remote_path = $url_info['path'];

$socket = fsockopen($remote_server, $port, $errno, $errstr, $timeout);

if(!$socket)

{

die("$errstr($errno)");

}

if($user_agent == '')

{

$user_agent = $this->ua_string;

}

if (!is_array($data))

{

$data = array($data);

}

$data = http_build_query($data);

fwrite($socket, "POST {$remote_path} HTTP/1.0\r\n");

fwrite($socket, "User-Agent: {$user_agent}\r\n");

fwrite($socket, "HOST: {$remote_server}\r\n");

fwrite($socket, "Content-type: application/x-www-form-urlencoded\r\n");

fwrite($socket, "Content-length: " . strlen($data) . "\r\n");

fwrite($socket, "Accept:*/*\r\n");

fwrite($socket, "\r\n");

fwrite($socket, "{$data}\r\n");

fwrite($socket, "\r\n");

$header = "";

while($str = trim(fgets($socket, 4096)))

{

$header .= $str;

}

$data = "";

while(!feof($socket))

{

$data .= fgets($socket, 4096);

}

return $data;

}

// -----------------------

/**

* 文件流提交

*

* @param string $url 提交地址

* @param string $data 数据

* @param string $user_agent 自定义的UA

* @return mixed

*/

public function streamPost($url, $data, $user_agent = '')

{

if($user_agent == '')

{

$user_agent = $this->ua_string;

}

if (!is_array($data))

{

$data = array($data);

}

$data = http_build_query($data);

$context = array(

'http' => array(

'method' => 'POST',

'header' => 'Content-type: application/x-www-form-urlencoded'

. "\r\n" . 'User-Agent : ' . $user_agent . "\r\n" . 'Content-length: ' . strlen($data),

'content' => $data

)

);

$stream_context = stream_context_create($context);

$data = file_get_contents($url, FALSE, $stream_context);

return $data;

}

// -----------------------

/**

* 发送请求

*

* 本方法通过curl函数向目标服务器发送请求

*

* @param string $url 请求地址

* @return mixed

*/

public function request($url)

{

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $url);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

curl_setopt($ch, CURLOPT_USERAGENT, !empty($this->ua_string)? $this->ua_string : $_SERVER['HTTP_USER_AGENT']);

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);

if (isset($this->cookie_file))

{

curl_setopt($ch, CURLOPT_COOKIEJAR, $this->cookie_file);

}

$data = curl_exec($ch);

curl_close($ch);

return $data;

}

}

?>

调用示例:

"socket");

$rs[] = $HttpHelper->post($url, $data);

$data = array("name"=>"curl");

$rs[] = $HttpHelper->post($url, $data, "curl");

$data = array("name"=>"stream");

$rs[] = $HttpHelper->post($url, $data, "stream");

$rs[] = $HttpHelper->request($url);

print_r($rs);

?>

3,post.php文件:

4,输出结果:

Array

(

[0] => test request:Array

(

[name] => socket

)

[1] => test request:Array

(

[name] => curl

)

[2] => test request:Array

(

[name] => stream

)

[3] => test request:Array

(

)

)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/547699.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

iBatis for Net 代码生成器(CodeHelper)附下载地址(已经升级为V 1.1)

CodeHelper是一款可以自己定义模板和生成内容的代码生成器,目前只支持MsSql数据库,这款代码生成器的初衷也只是为了生成MyBatis.net框架的配置文件而写的一个轻量级的代码生成器。CodeHelper下载文件包介绍:Template\... 存放模板文件夹&…

在Access中执行SQL语句

Access在小型系统开发中等到了广泛使用。虽然Access提供了可视化的操作方法,但许多开发人员还是喜欢直接用SQL语句操作数据表。如何在Access中打开SQL视图,对于初次使用Access的程序员可得费点时间呢。 1、ACESS2007 (1)点击“创建…

K8S+Helm 安装 Jupyterhub

准备配置文件 生成随机数 openssl rand -hex 32 # 8fc2826e9ce6930ec26c9fd541c0620b448a947357edbdf9647516af16bbc798配置config.yaml如下,token是上一步生成 proxy:secretToken: "8fc2826e9ce6930ec26c9fd541c0620b448a947357edbdf9647516af16bbc798&quo…

iBatis for net 框架使用

简介:ibatis 一词来源于“internet”和“abatis”的组合,是一个由Clinton Begin在2001年发起的开放源代码项目,到后面发展的版本叫MyBatis但都是指的同一个东西。最初侧重于密码软件的开发,现在是一个基于Java的持久层框架&#x…

php 图片后缀,PHP如何实现图片无后缀

在偶然间网站开发,实现网页内容抓取的时候,发现有些图片居然没有后缀。然后怀着踽踽独行的心态,去尝试了下这个以前没有遇见过的“重大发现”:当完成测试后,发现其原理,也是真心简单,其实也就是…

Office Web Apps Server 2013与PDF(一)

好吧……这个消息有点旧,迟了将近4个月。 Office Web Apps是微软各大服务产品系列中的一个基础服务,可以为SharePoint 2013、Exchange 2013、Lync 2013提供企业内文档的在线预览和编辑功能;同时它也是一个基础的互联网服务,为诸如…

nifi 实现数据库到数据库之间数据同步

数据同步 界面如下: 具体流程: 1、使用ExecuteSQL连接mysql数据库,通过写sql查询所需要的数据 2、nifi默认查出来的数据为Avro格式,所以需要ConvertAvroToJSON把Avro格式转化为json格式的数据 3、使用ConvertJSONToSQL把json数据转…

php 文件 后缀,php如何修改文件后缀名

php修改文件后缀名的方法:首先创建PHP文件;然后定义一个“changeTypeName”方法;接着获取文件绝对路径;最后通过“rename($fileRealPath, $compressCssFileRealPath);”修改即可。php 改变文件目录下文件的后缀名changeTypeName(&…

函数重载二义性:error C2668: 'pow' : ambiguous call to overloaded function

2013-07-08 14:42:45 当使用的函数时重载函数时,若编译器不能判断出是哪个函数,就会出现二义性,并给出报错信息。 问题描述: 在.cpp代码中用到pow函数,如下: long int MaxInteger pow( 2,8*sizeof(long in…

windows自定义快速启动(运行)命令

自定义运行(windows键R)里面命令,启动设置的程序,如图:它的设置方法有两种: 第一种设置方法: 第1步:在任意地方创建一个文件夹(建议在D盘根目录创建)&#xf…

python RSA加密、解密、签名

python中用于RSA加解密的库有好久个,本文主要讲解rsa、M2Crypto、Crypto这三个库对于RSA加密、解密、签名、验签的知识点。 知识基础 加密是为了保证传输内容隐私,签名是为了保证消息真实性。 服务器存私钥,客户端存公钥。(服务…

php7 有参数类型,PHP7中的可空返回类型

小编典典PHP 7.1现在支持可为空的返回类型。我链接到的第一个RFC是他们使用的RFC:function nullOrString(int $foo) : ?string{return $foo%2 ? "odd" : null;}旧答案:由于我的评论实际上是对该问题的答案:PHP7尚不支持可空的返回…

DataGridview动态添加列

1.获取数据源&#xff08;select * from table名称&#xff09; 2.动态绑定数据源 1 private void GetTableInfo(DataTable dt)2 {3 listBh new List<BH_DICTInfo>();4 foreach (DataRow dr in dt.Rows)5 {6 …

C# 控制台应用程序输出颜色字体[更正版]

首先感谢院子里的“yanxinchen”&#xff0c;之前的方法是通过c#调用系统api实现的&#xff0c;相比之下我的有点画蛇添足了&#xff0c;哈哈。 最佳解决方案的代码&#xff1a; static void Main(string[] args){ Console.ForegroundColor ConsoleColor.Green; Consol…

MXNet结合kubeflow进行分布式训练

GPU集群配置MXNetCUDA 为方便控制集群&#xff0c;写了脚本cmd2all.sh #!/bin/bash if [ $# -lt 3 ]; thenecho "usage: $0 [type cmds hosts]"echo "for example: ./cmd2all.sh \"cmds\" \"touch t1.txt\" \"gpu1 gpu2\""…

php新建文件在指定目录下,PHP在获取指定目录下的目录,在获取的目录下面再创建文件,多平台...

代码如下://取得指定文件夹的目录名称function get_dir_name($dir_path,$file){$dirpath $dir_path;$dir scandir($dirpath);foreach ($dir as $key>$value){if (is_dir($dirpath./.$value) && $value ! . && $value ! ..){//echo $dirpath./.$value./.$f…

性能测试流程

一个项目如果有性能需求&#xff0c;那恭喜你&#xff0c;你接到活了&#xff0c;于是你开始着手开始性能测试。 首先第一步&#xff0c;你会先去了解业务&#xff0c;与此同时&#xff0c;产品或者项目经理也会给出他们的一些性能需求&#xff0c;和相关的指标要求&#xff0c…

基于Opencv的水位识别,液面识别、高度识别

Update 代码已经上传到github上了&#xff0c;可以点这里 Cutting 一直说这要整理一下Computer Vision课程的大作业&#xff0c;拖了好久。这两天忙着写一个订单处理的第三方库&#xff0c;陷入了僵局&#xff0c;所以换个口味&#xff0c;把大作业整理一下。 Requirement W…

php最新版本的安装,centos安装新PHP版本

方法一&#xff1a;yum 安装默认的版本太低了&#xff0c;手动安装有一些麻烦&#xff0c;想采用Yum安装的可以使用下面的方案&#xff1a;1.检查当前安装的PHP包yum list installed | grep php如果有安装的PHP包&#xff0c;先删除他们yum remove php.x86_64 php-cli.x86_64 p…

Openshift3.9部署手册

说明&#xff1a;本文主要介绍通过Ansible来部署Openshift 3.9 一、准备 系统准备 节点类型说明Masters 物理主机或者虚拟机 系统&#xff1a;Fedora 21, CentOS 7.3, 7.4或者7.5 最少4vCPU 最少16GB内存 /var/最少40GB空间 /usr/local/bin最少1GB空间 容器临时目录最少1GB空…