没事的时候自己封装了一个socket类

功能非常easy和curl功能是一样的

class socketClass{
private $host;
private $url;
private $error_no = 0;
public $error_str = '';
private $port = 80;
private $timeout = 5;
private $method;
private $param;
private $fp;
private $content = '';
private $header = array();
public function __construct($host, $port, $url, $param, $method='GET', $timeout=5) {
$this->host = $host;
$this->port = $port;
$this->url = $url;
$this->timeout = $timeout;
$this->method = $method;
if(is_array($param)){
$this->param = http_build_query($param);
}else{
$this->param = $param;
}
}
private function connect(){
$this->fp = fsockopen($this->host, $this->port, $this->error_no, $this->error_str, $this->timeout);
if(!$this->fp){
$this->error_str = 'socket connect failed';
return false;
}
return true;
}
private function send(){
$this->fp = '';
if(!$this->connect()){
$this->error_str = 'connect socket failed';
return false;
}
if($this->method == 'POST'){
$header = "POST $this->url HTTP/1.1\r\n";
}else{
if(!empty($this->param)){
$header = "GET $this->url?$this->param HTTP/1.1\r\n";
}else{
$header = "GET $this->url HTTP/1.1\r\n";
}
}
$header .= "Content-Length:" . strlen($this->param) . "\r\n";
$header .= "Host:$this->host:$this->port\r\n";
$header .= "Content-Type:application/x-www-form-urlencode\r\n";
$header .= "Connection:close\r\n\r\n";
if($this->method == 'POST'){
$header .= "$this->param\r\n\r\n";
}
if(!empty($this->header)){
foreach ($this->header as $key=>$val){
$tmep = urlencode($val);
 $header .= "$key:$temp\r\n";
}
}
fwrite($this->fp, $header);
while(!feof($this->fp)){
$this->content .= fread($this->fp, 1024);
}
fclose($this->fp);
return true;
}
public function getContent(){
if(!$this->send()){
return false;
}
$pos = strpos($this->content, "\r\n\r\n");
$this->content = substr($this->content, $pos);
return $this->content;
}
public function setHeader($key, $val){
$this->header[$key] = $val;
}
public function getErrorStr(){
return $this->error_str;
}
}
$host = 'localhost';
$port = 81;
$url = 'http://localhost/phpdemo/php/socket_accept.php';
$param = array('username'=>'beggar', 'passwd'=>'20060400');
$method = 'GET';
$timeout = 10;
$http = new socketClass($host, $port, $url, $param, $method, $timeout);
$http->setHeader('referer', $url);
$http->setHeader('Accept', '*/*');
$header = $http->getContent();
echo $header;

PHP socket类的更多相关文章

  1. ServerSocket与Socket类

    ServerSocket与Socket类 TCP套接字协议: TCP最主要的特征就是能够建立长时间的连接,而且能够保证数据安全的送达,但是速度比较慢.使用TCP进行连接的时候会有三次握手,之后才建立起 ...

  2. Socket类 以及 ServerSocket类 讲解

    Socket类 套接字是网络连接的端点,套接字使应用可以从网络中读取数据,可以向网络中写入数据.不同计算机上的两个应用程序可以通过连接发送或接收字节流,以此达到相互通信的目的. 为了从一个应用程序向另 ...

  3. socket系列之客户端socket——Socket类

    假设TCP套接字服务器端已经建立好并正在监听客户端的连接了,那么客户端就可以通过Socket类来发起连接.客户端发起一个连接请求后,就被动地在等待服务器的响应.这个类同样位于java.net包中,包含 ...

  4. Socket 类

    构造函数       名称 说明 Socket(AddressFamily, SocketType, ProtocolType) 新实例初始化 Socket 类使用指定的地址族. 套接字类型和协议. ...

  5. java网络编程ServerSocket类 和Socket类的常用构造方法及其方法

    Socket类Socket(InetAddress address, int port) 创建一个流套接字并将其连接到指定 IP 地址的指定端口号.Socket(String host, int po ...

  6. 详解 ServerSocket与Socket类

    (请观看本人博文 -- <详解 网络编程>) 目录 ServerSocket与Socket ServerSocket 类: Socket类: ServerSocket与Socket 首先, ...

  7. 【Android编程】Java利用Socket类编写Metasploit安卓载荷辅助模块

    /作者:Kali_MG1937 CSDN博客:ALDYS4 QQ:3496925334/ 注意!此文章被作者标记到 黑历史 专栏中,这意味着本篇文章可能存在 质量低下,流水账文,笔法低质 的问题 为了 ...

  8. 编写Java程序,使用 Socket类模拟用户加入 QQ 群时,QQ 小冰发送欢迎消息的场景(用户充当客户端,QQ 小冰充当服务端)

    查看本章节 查看作业目录 需求说明: 小冰是微软公司研发的人工智能机器人,被腾讯公司加入 QQ 群后,立即受到千万网友的喜爱.现在使用 Socket类模拟用户加入 QQ 群时,QQ 小冰发送欢迎消息的 ...

  9. 解决Docker运行命令时提示"Got permission denied while trying to connect to the Docker daemon socket"类情况

    Docker安装命令: 解决Docker运行命令时提示"Got permission denied while trying to connect to the Docker daemon ...

随机推荐

  1. mysql基础:mysql列类型--时间和日期

    mysql列类型--整型 http://blog.csdn.net/jk110333/article/details/9342283 mysql列类型--字符串http://blog.csdn.net ...

  2. IT忍者神龟之中的一个句sql语句——连接同一字段的全部值

    Oracle能够用SYS_CONNECT_BY_PATH字符串聚合函数: SELECT LTRIM(MAX(SYS_CONNECT_BY_PATH(productname, ', ')), ', ') ...

  3. HDU 1863 畅通project (最小生成树是否存在)

    题意 中文 入门最小生成树  prim大法好 #include<cstdio> #include<cstring> using namespace std; const int ...

  4. 打印org.eclipse.xsd.XSDSchema对象

    由于网上关于Eclipse XSD的中文资料比較少,可是有的时候.我们须要使用Eclipse XSD的API去构造或者改动一个XSD文件. 那么当我们创建了org.eclipse.xsd.XSDSch ...

  5. 一切皆为 JavaScript

    JavaScript起源于Netscape公司的LiveScript语言,这是一种基于对象和事件驱动的client脚本语言.最初的设计是为了检验HTML表单输入的正确性. 早些年,JavaScript ...

  6. Android自定义shape的使用

    MainActivity如下: package cn.testshape; import android.os.Bundle; import android.app.Activity; /** * D ...

  7. 复制文件时,如何显示进度条(使用BlockRead函数读取数据,并插入application.ProcessMessages)

    procedure mycopyfile(sourcef,targetf:string;i:integer); var FromF,ToF:file; NumRead,NumWritten:Integ ...

  8. 如何得到动态链接库的输出函数tdump命令(225篇博文)

    有的时候,我们需要查看一个动态链接库的输出函数列表,有很多软件可以满足此要求,比如说 exeScope.不过,去下载一个软件总归是很麻烦,Delphi 本身就自带一个类似的工具,那就是 tdump.e ...

  9. 【MFC两种视频图像採集方法】DirectShow与Opencv

    效果图: DirectShow採集核心代码: 创建线程调用该函数,採集图像通过x264解码封装rtmp协议包.推送至FMSserver,可实现视频直播 UINT __stdcall StartVide ...

  10. 02将代码开源到github(不会使用github的来看看吧)

    github不多说了,新建一个repository.如图: 这个创建好了之后,我们在eclipse中新建项目WeatherPro,安装githubclient. 安装好了之后,打开git bash,进 ...