PHPでのソケット通信
最近、TwitterのBOT作りにソケット通信の段階でコケた人ですw
今日は自分用にソケット通信について書いておきます、こんなコードでざくざくやってましたw
<?php header("Content-type:text/html;charset=EUC-JP") ; require("../../error_out.php") ; $add = "http://host/path" ; $data = "ax=b&hi=s" ; echo "<pre>" ; $urld = parse_url($add) ; print_r($urld) ; echo "</pre>" ; //ヘッダ構築 $headers = "POST ".$urld['path']." HTTP/1.1\r\n" ; $headers .= "User-Agent:PHP/".phpversion()."\r\n" ; $headers .= "Host: ".$_SERVER["HTTP_HOST"]."\r\n" ; $headers .= "Content-Type: application/x-www-form-urlencoded\r\n" ; $headers .= "Content-Length: ".strlen($data)."\r\n\r\n" ; echo str_replace("\r\n","<br>",$headers) ; $sockd = fsockopen($urld["host"],80) ; fputs($sockd,$headers) ; fputs($sockd,$data) ; fclose($sockd) ; ?>
メモ?
- parse_url => URLをパースする
結果
Array
(
[scheme] => http
[host] => vocaloid.net
[path] => /~miku_hatsune/hogehoge/post.php
)
-
- 一部文字列を変更しています、こんなふうにURLをパースしてあとにあるヘッダ作成とソケット通信の時に立ちます。
- このパースした内容は$urldに入れてあり中身は連想配列となってます
- ヘッダ構築
- ここはもろ参考元からコピーしました、勉強しろですね、はい。
POSTでの接続パターンがこれのようです。
- ソケット開く
- さっき代入したパース情報から["host"]として接続先の指定をします、HTTPでの通信をしたいので80番ポートを指定。
- アクセスハンドルは$socksに代入
- 最初にfputs($socks,$header)としてヘッダーをサーバに送信
- 次にfputs($socks,$data)として内容をサーバに送ります。
- 何もせずに接続を切ります
- レスポンスをチェックできるようにしないとなぁ・・・