php使用socket调用http和smtp协议实例小结

2025-05-27 0 21

本文实例讲述了php使用socket调用http和smtp协议。分享给大家供大家参考,具体如下:

socket发送HTTP请求

http协议请求报文格式

get

?

1

2

3
## 请求方法 请求文件路径?查询字符串 HTTP/协议版本号

## Host: 主机名:端口号

## Connection:close

post

?

1

2

3

4

5

6
## 请求方法 请求文件路径 HTTP/协议版本号

## Host: 主机名:端口号

## Content-type: application/x-www-form-urlencoded

## Content-length: 查询字符串长度

## Connection: close

## 查询字符串

api.php

?

1

2

3
<?php

echo $_SERVER["REQUEST_METHOD"]."<br/>";

print_r($_REQUEST);

fsocketopen发送get请求

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19
<?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请求

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23
<?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发送邮件

fsocketopenpfsocketopenphp机制本身的函数,可以直接调用,不需要安装扩展。以上两个函数可以打开一个网络连接或者一个Unix套接字连接,然后我们可以使用fwrite,fread,fclose,feof等函数直接操作该网络连接。

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29
<?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客户端的功能。

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30
<?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);

参考文章:

https://www.zzvips.com/article/151234.html

https://www.zzvips.com/article/164860.html

希望本文所述对大家PHP程序设计有所帮助。

原文链接:https://blog.csdn.net/koastal/article/details/53149689

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 php使用socket调用http和smtp协议实例小结 https://www.kuaiidc.com/71253.html

相关文章

发表评论
暂无评论