医師 転職 ナースバンク
FC2ブログ
Take a Rest
適当に思ったことや、個人的なメモなどをアップする場所。 気が向いたときにしか書かないので、更新頻度は低め。
プロフィール

agloo

Author:agloo
FC2ブログへようこそ!



最近の記事



最近のコメント



最近のトラックバック



月別アーカイブ



カテゴリー



ブロとも申請フォーム

この人とブロともになる



ブログ内検索



RSSフィード



リンク

このブログをリンクに追加する



スポンサーサイト
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。


PHPでフォームを介さずにGETとPOSTを送信する
ネットでPHPからフォームを介さずにPOSTをする方法を調べた際に書いてあるサイトは色々発見できたのですが、どうも自分には分かりづらいところが多かったので、個人的なメモですが、PHPからフォームを介さずにPOSTをする方法を書いて見ます。


フォームを介さず、PHPでPOSTリクエストを送る方法。

まずは分かりやすいGETから書いてみる。

下記のようなフォームからhttp://example.com/index.phpへ送信した場合、
<form method="GET" action="http://example.com/index.php">
  <input type="text" name="id" value="1">
  <input type="text" name="data" value="test">
  <input type="submit" value="送信">
</form>

ブラウザーのアドレスバーには以下の様に表示される。
http://example.com/index.php?id=1&data=test


上記をPHPからフォームを介さずGETで送信する場合、fsockopenを利用する。

<?php
  $server  = "example.com";  // 送信したいサーバのアドレス
  $host    = "localhost";
  $port    = 80;             // HTTPなので80
  $timeout = 30;             // 接続に失敗した場合の待ち時間

  $sock = fsockopen($host, $port, $errno, $errstr, $timeout);  // サーバに接続する
  if($sock === FALSE){    // 接続に失敗したらメッセージを表示し、終了させる
    echo "SOCK OPEN ERROR<br>";
    exit(-1);
  }

  // HTTPヘッダ部分の送信になる。
  fwrite($sock, "GET http://" . $server . "/index.php?id=1&data=test HTTP/1.0\r\n");
  // ヘッダの終了を通知
  fwrite($sock, "\r\n\r\n");

  fclose($sock);

?>

以上で、GETリクエストがPHPから直接送信可能になる。




form methodを下記のようにGETからPOSTに変更し、GETと同じように送信した場合、

<form method="POST" action="http://example.com/index.php">
  <input type="text" name="id" value="1">
  <input type="text" name="data" value="test">
  <input type="submit" value="送信">
</form>

ブラウザーのアドレスバーにはGETの場合とは違い、送信された内容がアドレス部分には表示されない。
http://example.com/index.php


上記をPHPからフォームを介さずPOSTd送信する場合もfsockopenを利用する。
基本的にはGETの場合と変わらない。

<?php

// GETとは違い直接リクエスト内容はURLに含めない
$server   = "http://example.com/index.php";
$host    = "localhost";
$port    = 80;
$timeout = 30;
// 送信したい内容をGETと同じくname=value&name=valueの形式で指定する。
$data    = "id=1&data=test";

  $sock = fsockopen($host, 80, $errno, $errstr, 60);
  if($sock === FALSE){
    echo "fsockopen error";
    return (-1);
  }


  fwrite($sock, "POST " . $server . " HTTP/1.0\r\n");
  // おまじないのような物、POSTで送信する為に必要なヘッダ
  fwrite($sock, "Content-Type: application/x-www-form-urlencoded\r\n");
  // 送信する内容のデータ長を送る
  fwrite($sock, "Content-Length: " . strlen($data) . "\r\n");
  // ヘッダの終了を通知
  fwrite($sock, "\r\n");
  // 内容の送信
  fwrite($sock, $data);
  // 内容の終了を通知
  fwrite($sock, "\r\n");

  fclose($sock);

?>

でPHPからフォームを介さずにPOSTでデータを送信することが可能になる。



GET,POST共に、上記の様にヘッダを送信した場合、ログにはUser-AgentやReferer等が表示されないので、表示したい場合は
fwrite($sock, "POST " . $server . " HTTP/1.0\r\n");
の後に

User-AgentにPHPと指定。
fwrite($sock, "User-Agent: PHP\r\n");

Refererに例えば、http://example.com/index.php?id=1&data=testと残してみる。
fwrite($sock, "Referer: $server?$data\r\n");

のような感じで、ヘッダを送信すると良い。

テーマ:PHP - ジャンル:コンピュータ


この記事に対するコメント
承認待ちコメント
このコメントは管理者の承認待ちです
【2010/09/02 03:54】 | # [ 編集]

Re: タイトルなし
> 活用させて頂くときに気付いたのですが
> GETで送信する場合に
>
> $host = "localhost"
>
> が抜けている様です。

ああ、確かに抜けていますね。
さっそく修正しました。
ご指摘ありがとうございます。
【2010/12/26 21:43】 URL | agloo #- [ 編集]


この記事に対するコメントの投稿














管理者にだけ表示を許可する


この記事に対するトラックバック
この記事にトラックバックする(FC2ブログユーザー)
トラックバックURL
→http://agloo.blog92.fc2.com/tb.php/30-d08d4034

PHPでGET/POSTでフォームから送信された値を受け取る

PHPでGET/POSTでフォームから送信された値を受け取る【更新】リンク更新 ぱふぅ家のホームページ【2016/07/30 17:04】



上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。