/var/log/masayoshi/masayoshi.life.log

とりあえず、書きたいこと書くだけ。

PHPでのソケット通信

最近、TwitterBOT作りにソケット通信の段階でコケた人です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)として内容をサーバに送ります。
    • 何もせずに接続を切ります
      • レスポンスをチェックできるようにしないとなぁ・・・

これで終わり、TwitterAPIを使いたいぜよ