底层操作HTTP协议常见相关技术

socket: 套接字,(插座,孔),主要的做用就是在传输层中实现服务器和浏览器之间的数据操作。

fsockopen:是在socket上做的封装,是php内置函数库。

socket_stream:是在socket上做的封装,是php内置函数库。

fsockopen和socket_stream 是两个派系的socket函数库。但是socket是基础的通行方法,所以socket的功能最强,而fsockopen只是把常见的web网络应用做的简单封装,所以功能很少,而如果使用socket比较烦,那么可以使用socket_stream来操作socket。socket_stream功能强大。

libcurl:底层也是socket封装的,封装的更强。Curl在php中其实就是libcurl操作。

Socket:水泥黄沙,是建筑的基本材料。

Fsockopen和socket_stream:水泥砖,楼板,在socket基础上封装的水泥模块。

Libcurl:房子建好了,只是还没有装修。

 

socket是传输层的的协议技术。

socket是TCP/IP协议簇的接口封装,使用socket可以使用http协议原理,直接操作TCP/IP

socket可以实现常见web中各种协议,HTTP,HTTPs,FTP,XMLHTTP,SMTP,POP3,用户认证体系,表单提交,等等。

用户操作socket,socket直接告诉系统去做什么,而系统直接告诉网卡去发送数据。

 

Phpinfo():没有socket扩展:Extension = php_sockets.dll

创建一个socket $socket = socket_create(协议,类型,公共协议)

协议: AF_INET: 使用的是Ipv4协议. AF_INET6:使用的ipv6的协议。

类型: SOCK_STREAM: 数据传输的是二进制流,是使用最广泛的一种数据类型 SOCK_DGRAM: 这种数据类型主要是针对UDP协议的数据传输

公共协议: SOL_TCP: 创建的socket使用TCP SOL_UDP: 创建的socket使用UDP

 

 

绑定socket地址/端口: Socket_bind(参数1,参数2,参数3);

参数1:socket链接资源 参数2:ip地址: 参数3: 端口号(可选)

socket连接: Socket_connet($socket,$addr,$port);

$socket:socket资源 $addr:ip地址 $port:端口号//注意:如果是本机测试的话,绑定端口和连接端口不能相同(省略绑定端口)

写入socket数据: Socket_write($socket,$msg,$len);

$socket:资源类型 $msg:写入的信息 $len: 写入的长度;(可选)

读取socket数据: $content = Socket_read($socket,长度):

$socket:socket资源。长度:读取内容的长度。

关闭socket链接: Socket_close($socket);

eg:$sock=sockte_create(AF_TNET,SOCK_STREAM,SOL_TCP);

  socket_connect($sock,"127.0.0.1",80);

  $data="name=box&sex=boy";

  $msg="POST /milldle/socket/postsocket.php HTTP/1.1\r\n";

  $msg.="Host:  localost\r\n";

  $msg.=""Connection: keep-alive\r\n";

  $msg.="User-Agent: Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.91 Safari/537.36\r\n";

  $msg.="Content-legth: ".strlen($data)."\r\n";

  $msg.="Content-Type: application/x-www-form-urlencoded\r\n";

  $msg.=$data.\r\n; 

  socket_write($socket,$msg);

  var_dump(socket_read($socket,'1000')); 

  socket_close($socket);

posted on 2017-11-01 12:30  顾君临  阅读(68)  评论(0)    收藏  举报