プロが教える店舗&オフィスのセキュリティ対策術

現在、PHPにてブログシステムを作成中です。
ブログの特徴であるトラックバック機能について
いろいろと調べてみたのですが、あまり理解できませんでした。

http://lowlife.jp/yasusii/stories/8.html#descrip …

こちらなどで、しくみ自体はなんとなく理解できたのですが、実装の面で、実際にどういうコーディングをすればいいのかがわかりません。

HTTPリクエストでPOSTする、
らしいのですが、
上記サイトでいうと

POST http://www.hoge.hoge/mt-tb.cgi/5
Content-Type: application/x-www-form-urlencoded
title=Foo+Bar&url=http://www.tbtest.com/&excerpt=My+Excerpt&blog_n …

というものだと思うのですが、これをどこに挿入すればいいのかがわかりません。

header() にいれたり、一番最初に記述したり、
いろいろ試してみたのですが、なぜかPHPファイルをダウンロードしようとして失敗しました、というエラーがでたりします。

根本的に間違ってるのかもしれませんが、
どうかご教示いただけたらと思います。

開発環境:
WIN XP PRO
Apache 2.0.54
PHP 5.0.4

A 回答 (1件)

『HTTPリクエストでPOSTする』と言う所がポイントです。


つまり、通常Web上でサーバ(サイドスクリプト)として振舞っているPHPを、
クライアント、つまりWebブラウザとして動作させる必要が有ります。
その為にどうすれば良いかと言うと、PHPにはfsockopenやsocket等の
ネットワーク関数が用意されていますので、これを利用します。

fsockopen の例
<?php
 // ソケット接続を開く
 $fp = fsockopen("www.foo.com", 80, $errno, $errstr, 30);
 if ( !$fp ) {
  echo "$errstr ($errno)<br />\n";
 }else {
  // ヘッダ生成
  $header = "POST http://www.hoge.hoge/mt-tb.cgi/5 HTTP/1.1\r\n";
  $header .= "Content-Type: application/x-www-form-urlencoded\r\n";
  $header .= "title=Foo+Bar&url=http://www.tbtest.com/&excerpt=My+Excerpt&blog_n …

  // ヘッダ送信
  fwrite($fp, $header);

  // レスポンス取得
  while ( !feof($fp) ) {
   echo fgets($fp, 512);
  }

  fclose($fp);
 }
?>

socket の例
<?php
 // 送信ヘッダ作成
 $header = "POST http://www.foo.com/mt-tb.cgi/5 HTTP/1.1\r\n";
 $header .= "Content-Type: application/x-www-form-urlencoded\r\n";
 $header .= "title=Foo+Bar&url=http://www.tbtest.com/&excerpt=My+Excerpt&blog_n …

 // ソケット生成
 $socket = @socket_create(AF_INET, SOCK_STREAM, 0)
  or die("ソケットの生成に失敗しました。\n");

 // 接続開始
 @socket_connect($socket, $host, $port)
 or die("接続に失敗しました。\n");

 // ヘッダ送信
 @socket_write($socket, $header, strlen($in))
  or die("ヘッダ送信に失敗しました。\n");

 // レスポンス取得
 $out = @socket_read($socket, 1048576)
 or die("レスポンスの取得に失敗しました。\n");
 echo $out;

 // ソケット破棄
 socket_close($socket);
?>

以上、ご参考までに。



http://jp2.php.net/manual/ja/function.fsockopen. …
http://www.php.net/manual/ja/ref.sockets.php
    • good
    • 0
この回答へのお礼

返事が遅くなってしまい申し訳ありませんでした。

ご回答ありがとうございます。
教えていただいた方法にて、試してみましたら、
思っていたようなHTTPリクエストができました!!
ただ、なぜかtitleがありません、というエラーがもどってきしまいましたが。
やり方はこれであってるようなので、もう少し試行錯誤してみようと思います。

ありがとうございました。

お礼日時:2005/09/13 23:58

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!