phpsockethttp
① php如何使用socket發送郵件,知識要點是什麼
需要了解一下發送郵件的協議 如 smtp, emstp 是如何會話的,郵件格式,和郵件編碼規則
當然最好還是要了解一下 socket 通信,若這些都知道的話,那剩下編碼應不是問題了
郵件編碼和格式可以參考 RFC821,RFC1869, RFC2821 等相關文檔, 裡面有詳細的說明
文檔可到
http://www.rfc.net
http://www.ietf.org
等網站去找
http://www.cnpaf.net(中國協議分析網)對部分RFC文檔進行了翻譯,E文不是很好的話可到上面去找找
若只是用的話,不建議自己去寫,網上很多成熟開源 如 PHPMailer 等,學習的話可以去練練
② php socket 消息頭消息體
給你個地址,上面說的很詳細
http://www.2cto.com/kf/201109/102355.html
③ php的curl和socket的區別
不是socket,curl其實是http請求,你就可以直接理解位頁面操作連接,一般只支持80埠。 而socket,則是可以支持全部埠的。 socket_create()函數就是創建socket連接,可以用來寫socket通訊。
④ 如何用PHP定義socket的包頭
$info["path"] = '/index.html';
$info["host"] = '127.0.0.1';
$info["port"]=80;
$data_string= "name=peter";
這個是發送請求,重新定義了http頭部,具體信息在函數里修改就可以了。
echo url_post($info, $data_string);
function url_post($info, $data_string){
$request = '';
$request.="POST ".$info["path"]." HTTP/1.1\n";
$request.="Host: ".$info["host"]."\n";
//$request.="Referer: $referrer\n";
//$request.="Content-type: application/x-www-form-urlencoded\n";
$request.="Content-length: ".strlen($data_string)."\n";
$request.="Connection: close\n";
$request.="\n";
$request.=$data_string."\n";
//echo $request;
$fp = fsockopen($info["host"],$info["port"]);
fputs($fp, $request);
$result = '';
while(!feof($fp)) {
$result .= fgets($fp, 128);
}
fclose($fp);
return $result;
}
⑤ PHP 求助,SOCKET收不到響應
沒用過php的socket,不過查看socket_read的手冊的時候,看到下面有些人對於win上面的socket的討論,你可以看看:
http://www.php.net/manual/zh/function.socket-read.php
裡面提到一個bug:
https://bugs.php.net/bug.php?id=21197
你可以在socket_read最後加上:PHP_NORMAL_READ這個參數試試:
while($out = socket_read($socket, 2048,PHP_NORMAL_READ))
⑥ php的curl和socket的區別
不是socket,curl其實是http請求,你就可以直接理解位頁面操作連接,一般只支持80埠。 而socket,則是可以支持全部埠的。 socket_create()函數就是創建socket連接,可以用來寫socket通訊。
⑦ php可不可以socket通信長連接,不斷開,然後實現多次通訊
當然可以,我都已經做過udp socket雲端門禁管理系統,伺服器socket監控設備連接狀態,設備通過發送心跳包來維持連接,從而實現長連接,更多詳情http://www.100txy.com/article/54.html
⑧ 如何查看php進程請求的socket詳情
PHP使用socket發送HTTP請求的方法,具體如下:
socket方式:
$socket=socket_create(AF_INET,SOCK_STREAM,SOL_TCP);//socket_set_option($socket,SOL_SOCKET,SO_SNDTIMEO,array("sec"=>20,"usec"=>0));socket_connect($socket,'www..com',80);//裡面的換行代表 注意拷貝的代碼後面可能有空格$http=<<<eof
GET/HTTP/1.0
Accept:*/*
User-Agent:Lowell-Agent
Host:www..com
Connection:Close
eof;
socket_write($socket,$http,strlen($http));while($str=socket_read($socket,1024))
{
echo$str;
}
socket_close($socket);
fsockopen方式:
$fp=fsockopen("www..com",80,$errno,$errstr,30);if(!$fp){
echo"$errstr($errno)<br/> ";
}else{
$out="GET/HTTP/1.1 ";
$out.="Host:www..com ";
$out.="Connection:Close ";
fwrite($fp,$http);
while(!feof($fp)){
echofgets($fp,128);
}
fclose($fp);
}
原始socket方式:
$fp=stream_socket_client("tcp://www..com:80",$errno,$errstr,30);if(!$fp){
echo"$errstr($errno)<br/> ";
}else{
$http=<<<eof
GET/HTTP/1.0
Accept:*/*
User-Agent:Lowell-Agent
Host:www..com
Connection:Close
eof;
fwrite($fp,$http);
while(!feof($fp)){
echofgets($fp,1024);
}
fclose($fp);
}
stream方式(get):
$http=<<<eof
Host:www..com
User-Agent:Mozilla/5.0(WindowsNT6.1;WOW64;rv:27.0)Gecko/20100101Firefox/27.0Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8Accept-Language:zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3Cookie:BAIDUID=:FG=1;BDUSS=lF--FPnkfhTU;BAIDUPSID=;BD_UPN=13314352;BD_HOME=1;H_PS_PSSID=10047_1435_10874_10212_10501_10496_10753_10796_10219_10355_10666_10597_10095_10658_10442_10700_10460_10360_10618;sug=3;sugstore=0;ORIGIN=2;bdime=0Connection:keep-alive
Cache-Control:max-age=0
eof;
$hdrs=array(
'http'=>array(
'header'=>$http,
'timeout'=>1,//超時秒
'method'=>'GET',//默認方式
'protocol_version'=>'1.1',//默認為1.0),
);
//參數格式參考http://php.net/manual/zh/context.http.php//curl方式的格式可以參考;http://php.net/manual/zh/context.curl.php$context=stream_context_create($hdrs);
echofile_get_contents('http://www..com',0,$context);stream方式post:
$postdata=http_build_query(array('act'=>'save','id'=>387171));$http=<<<eof
Host:www..com
User-Agent:Mozilla/5.0(WindowsNT6.1;WOW64;rv:27.0)Gecko/20100101Firefox/27.0Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8Accept-Language:zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3Content-Type:application/x-www-form-urlencoded;charset=UTF-8Cookie:BAIDUID=:FG=1;BDUSS=lF--FPnkfhTU;BAIDUPSID=;BD_UPN=13314352;BD_HOME=1;H_PS_PSSID=10047_1435_10874_10212_10501_10496_10753_10796_10219_10355_10666_10597_10095_10658_10442_10700_10460_10360_10618;sug=3;sugstore=0;ORIGIN=2;bdime=0Connection:keep-alive
Cache-Control:max-age=0
eof;
#注意post方式需要增加Content-Type
$hdrs=array(
'http'=>array(
'header'=>$http,
'timeout'=>1,//超時秒
'method'=>'POST',
'content'=>$postdata,
'protocol_version'=>'1.1',//默認為1.0),
);
//參數格式參考http://php.net/manual/zh/context.http.php//curl方式的格式可以參考;http://php.net/manual/zh/context.curl.php$context=stream_context_create($hdrs);
echofile_get_contents('http://test.cm/song.php',0,$context);
⑨ 如何在php socket伺服器中對post進行相應
php的socket直接拿了報文體,本身socket拿到的數據是一段完整的報文,裡面有包含協議與請求方式在內的所有傳輸層的數據,弊端是不能直接調用。你要用php做的話用$_POST走http協議吧