ひとりごと

新しい記事:[739]  古い記事:[737] 表示単位 :

ついったー[おとなり日記] かがみさん Y.Kumagaiさん

2003/04/06 (日)

・ 更新チェッカにUser-Agent付加

サーブルさんとこで『たかたにさんところのチェッカは、もう少し判別しやすい固有のUA名がついているといいのですが…? 』のご指摘(汗

そういえば、WWWCの代わりに自分のページのリンク集で更新日取得をするようになったのですが、PHPのfopenをそのまま使っていたものだから、User-Agentが "PHP/バージョン番号" というなんかアヤしいものになっていたのです。HTTPで取ってくるのもなんか難しそうなのでほったらかして様子を見ていたのですが、ご指摘をうけて急いで変更(笑)。とりあえず、

takatani crawler/20030406 (http://toriyu.dd.que.ne.jp/~takatani/chacha/link/crawl.html)
というこれまたアヤしい UA を付ける事にしてみました。

(覚え書き) PHPで User-Agentを付けてfopenする関数
function fopenurl($url,$mode)
{
  $ret=array();
  $p = parse_url($url);
  $host = $p["host"];
  if (isset($p["port"])) $port = $p["port"];
  else $port = 80;
  $path = $p["path"];
  if (isset($p["query"])) $path .= "?" . $p["query"];

  $ua = "TEST!!";  ← ここに適当な文字列
  $fp = fsockopen ($host, $port,$errno,$errstr,30);
  if (!$fp) {
   return $fp;
  } else {
   fputs ($fp, "GET $path HTTP/1.0\r\nUser-Agent: $ua\r\nHost: $host\r\n\r\n");
   $st = split(" ",fgets($fp,128),3);
   $ret["_PROT"]=$st[0];
   $ret["_STATCODE"]=$st[1];
   $ret["_STATSTR"]=$st[2];
   while(!feof($fp) && "\r\n"!=($s=fgets($fp,1024))) {
    $st = split(": ",$s,2);
    $ret[$st[0]] = $st[1];
   }
  // $ret["_BODY"] = fread($fp,100*1024);
  // fclose ($fp);
  }
  return $fp;
}
はじめは array $ret にて値を受けようとしていたのですが、途中で面倒になって(^^;) fopen互換になりました。WWWサーバが期待通りの答えを返してくれなかった場合に誤動作する(笑)のと、"302 Found"を処理しない点で互換ではありません。今度書き直すときはヘッダの情報も使えるように・・・ということで残骸も残してあります。

□ 関連記事

[つっこみ]

新しい記事:[739]  古い記事:[737] 表示単位 :
※このページへのリンクは自由です。リンクの方法については[つっこみ]で表示されるページの最後をごらんください。
たかたに(takatani@mars.dti.ne.jp)