国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > PHP > 正文

php使用socket調用http和smtp協議實例小結

2024-05-05 00:10:37
字體:
來源:轉載
供稿:網友

本文實例講述了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

<?phpecho $_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發送郵件

fsocketopenpfsocketopen是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);

希望本文所述對大家PHP程序設計有所幫助。


注:相關教程知識閱讀請移步到PHP教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 蛟河市| 保德县| 大连市| 留坝县| 峨山| 龙里县| 积石山| 万州区| 个旧市| 康平县| 德州市| 疏附县| 江山市| 远安县| 丰原市| 万州区| 仁寿县| 二手房| 扎囊县| 阳信县| 武山县| 珠海市| 桦川县| 米易县| 松桃| 渝中区| 观塘区| 定日县| 五指山市| 青川县| 宾阳县| 许昌市| 平阴县| 宣城市| 四子王旗| 泸定县| 达尔| 应用必备| 冷水江市| 广元市| 巢湖市|