php获取socket连接的详细信息(php使用socket调用http和smtp协议实例小结)
php获取socket连接的详细信息
php使用socket调用http和smtp协议实例小结本文实例讲述了php使用socket调用http和smtp协议。分享给大家供大家参考,具体如下:
socket发送HTTP请求
http协议请求报文格式
get
|
## 请求方法 请求文件路径?查询字符串 HTTP/协议版本号 ## Host: 主机名:端口号 ## Connection:close |
post
|
## 请求方法 请求文件路径 HTTP/协议版本号 ## Host: 主机名:端口号 ## Content-type: application/x-www-form-urlencoded ## Content-length: 查询字符串长度 ## Connection: close ## 查询字符串 |
api.php
|
<?php echo $_SERVER [ "REQUEST_METHOD" ]. "<br/>" ; print_r( $_REQUEST ); |
fsocketopen发送get请求
|
<?php $url = "api.php" ; $host = "127.0.0.1" ; $port = 8080; $param = [ "name" => "zhezhao" , "age" =>23]; $url .= "?" .http_build_query( $param ); $socket = fsockopen ( $host , $port , $errno , $errstr ,10); $request = "GET /${url} HTTP/1.1\r\n" ; $request .= "Host:${host}:{$port}\r\n" ; $request .= "Connection:close\r\n\r\n" ; fwrite( $socket , $request ); echo "<b>Request:</b><br/>" . str_replace ( "\r\n" , "<br/>" , $request ); echo "<hr/><b>Response:</b><br/>" ; $response = "" ; while ( $out = fread ( $socket , 2048)) { $response .= $out ; } echo str_replace ( "\r\n" , "<br/>" , $response ); fclose( $socket ); |
sockets扩展发送post请求
|
<?php $url = "api.php" ; $host = "127.0.0.1" ; $port = 8080; $param = [ "name" => "zhezhao" , "age" =>23]; $data = http_build_query( $param ); $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); socket_connect( $socket , $host , $port ); $request = "POST /${url} HTTP/1.1\r\n" ; $request .= "Host:${host}:{$port}\r\n" ; $request .= "Content-type:application/x-www-form-urlencoded\r\n" ; $request .= "Content-length:" . strlen ( $data ). "\r\n" ; $request .= "Connection:close\r\n\r\n" ; $request .= "${data}" ; socket_write( $socket , $request ); echo "<b>Request:</b><br/>" . str_replace ( "\r\n" , "<br/>" , $request ); echo "<hr/><b>Response:</b><br/>" ; $response = "" ; while ( $out = socket_read( $socket , 2048)) { $response .= $out ; } echo str_replace ( "\r\n" , "<br/>" , $response ); socket_close( $socket ); |
socket发送smtp请求
首先通过socket连接到smtp服务器,例如smtp.163.com 25,然后实现smtp发送邮件的必须参数即可。
HELO 主机名
AUTH LOGIN base64编码之后的发件人邮箱
base64编码之后的密码
##填写信封
MAIL FROM:<发件人邮箱>
RCPT TO:<收件人邮箱>
##填写信件内容
DATA
MIME-Version:1.0
To: 收件人邮箱
From: 发件人邮箱
Subject: 邮件主题邮件内容
fsocketopen发送邮件
fsocketopen
和pfsocketopen
是php机制本身的函数,可以直接调用,不需要安装扩展。以上两个函数可以打开一个网络连接或者一个Unix套接字连接,然后我们可以使用fwrite
,fread
,fclose
,feof等函数直接操作该网络连接。
|
<?php $user = "root@163.com" ; $password = "root" ; $mailto = "1234567@qq.com" ; $subject = "fsocketopen发送邮件" ; $body = "收到邮件了么,亲" ; $sock = fsockopen ( "smtp.163.com" ,25); fputs ( $sock , "HELO localhost\r\n" ); echo fgets ( $sock , 512). "<br/>" ; fputs ( $sock , "AUTH LOGIN " . base64_encode ( $user ). "\r\n" ); echo fgets ( $sock , 512). "<br/>" ; fputs ( $sock , base64_encode ( $password ). "\r\n" ); echo fgets ( $sock , 512). "<br/>" ; fputs ( $sock , "MAIL FROM:<${user}>\r\n" ); echo fgets ( $sock , 512). "<br/>" ; fputs ( $sock , "RCPT TO:<${mailto}>\r\n" ); echo fgets ( $sock , 512). "<br/>" ; fputs ( $sock , "DATA\r\n" ); echo fgets ( $sock , 512). "<br/>" ; $header = "MIME-Version:1.0\r\n" ; $header .= "To: ${mailto}\r\n" ; $header .= "From: ${user}\r\n" ; $header .= "Subject: ${subject}\r\n" ; fputs ( $sock , $header . "\r\n" . $body ); echo fgets ( $sock , 512). "<br/>" ; fputs ( $sock , "\r\n.\r\n" ); echo fgets ( $sock , 512). "<br/>" ; fputs ( $sock , "QUIT\r\n" ); fclose( $sock ); |
sockets扩展发送邮件
sockets扩展的功能更加强大,可以搭建tcp/ip服务器,不过我们使用smtp协议发送邮件的例子,只需要使用到socket客户端的功能。
|
<?php $user = "root@163.com" ; $password = "root" ; $mailto = "1234567@qq.com" ; $subject = "sockets扩展发送邮件" ; $body = "收到邮件了么,亲" ; $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); socket_connect( $socket , "smtp.163.com" ,25); socket_write( $socket , "HELO localhost\r\n" ); echo socket_read( $socket , 512). "<br/>" ; socket_write( $socket , "AUTH LOGIN " . base64_encode ( $user ). "\r\n" ); echo socket_read( $socket , 512). "<br/>" ; socket_write( $socket , base64_encode ( $password ). "\r\n" ); echo socket_read( $socket , 512). "<br/>" ; socket_write( $socket , "MAIL FROM:<${user}>\r\n" ); echo socket_read( $socket , 512). "<br/>" ; socket_write( $socket , "RCPT TO:<${mailto}>\r\n" ); echo socket_read( $socket , 512). "<br/>" ; socket_write( $socket , "DATA\r\n" ); echo socket_read( $socket , 512). "<br/>" ; $header = "MIME-Version:1.0\r\n" ; $header .= "To: ${mailto}\r\n" ; $header .= "From: ${user}\r\n" ; $header .= "Subject: ${subject}\r\n" ; socket_write( $socket , $header . "\r\n" . $body ); echo socket_read( $socket , 512). "<br/>" ; socket_write( $socket , "\r\n.\r\n" ); echo socket_read( $socket , 512). "<br/>" ; socket_write( $socket , "QUIT\r\n" ); fclose( $sock ); |
参考文章:
http://www.zzvips.com/article/151234.html
http://www.zzvips.com/article/164860.html
希望本文所述对大家PHP程序设计有所帮助。
原文链接:https://blog.csdn.net/koastal/article/details/53149689
- web安全常见的测试工具有哪些(Web压力测试工具:http_load、webbench、ab、Siege使用方法)
- vmware虚拟机搭建服务器(VMware虚拟机建立HTTP服务步骤解析)
- 阿里云ssl证书ip地址(阿里云申请云盾免费SSL证书https)
- vue跨域代理怎么写(解决vue $http的get和post请求跨域问题)
- iis7安全设置(IIS7 IIS8 http自动跳转到HTTPS80端口跳转443端口)
- cookie httponly属性
- mvc中Action前HttpPost的作用
- HTTP消息中header头部信息的讲解
- nginx把https转为http请求(使用nginx方式实现http转换为https的示例代码)
- 宝塔linux面板部署防火墙后网页打不开报http564错误的解决办法(宝塔linux面板部署防火墙后网页打不开报http564错误的解决办法)
- HTTP header中Cache-control的介绍
- laravel 验证规则(Laravel中正确地返回HTTP状态码方法示例)
- web服务器和http服务器的区别(浅谈WEB服务器、应用程序服务器、HTTP服务器区别)
- js中encodeURIComponent与C#中HttpUtility.UrlEncode
- nginx https 域名配置(阿里云Nginx配置https实现域名访问项目图文教程)
- nginx设置https访问(基于Nginx实现HTTPS网站设置的步骤)
- 白龙马的改编学生版,快来看看(白龙马的改编学生版)
- 萌娃唱《白龙马》走红,那生动的小表情,网友直呼 简直是戏精(萌娃唱白龙马走红)
- 朱鹤松被不断认可,凤凰传奇玲花喊话岳云鹏,索要老朱演出门票(朱鹤松被不断认可)
- 元宵晚会槽点多,芒果台上来就假唱,岳云鹏不说相声改评书了(元宵晚会槽点多)
- 岳云鹏跟凤凰传奇谈心,说出了人生中最重要的三个人,这才成功(岳云鹏跟凤凰传奇谈心)
- 爱情可以当饭吃吗(爱情能当饭吃吗)
热门推荐
- 手机网站设计的几个建议
- laravel怎么查询信息过滤(laravel多条件查询方法and,or嵌套查询)
- 如何设置nginx使用ip访问(nginx基于域名,端口,不同IP的虚拟主机设置的实现)
- python使用django搭建简单网页(Python后台开发Django的教程详解启动)
- nginx反向代理怎样实现(Nginx反向代理配置的全过程记录)
- dedecms添加底部链接(织梦dedecms调用得到文章所属的副栏目id及副栏目名称的教程)
- html语法规范解释(浅析HTML5 Landmark)
- 云服务器好在哪你知道吗(美国云服务器怎么选择?美国云服务器选择技巧分享)
- javascript类型转换讲解(JavaScript数据类型转换详解推荐)
- python做学生成绩系统(python学生管理系统)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9