このブログ内
ウェブ全体
Take a Rest
適当に思ったことや、個人的なメモなどをアップする場所。 気が向いたときにしか書かないので、更新頻度は低め。
プロフィール
Author:agloo
FC2ブログへようこそ!
最近の記事
ニコ生のランキング一覧をフィルターする (04/03)
WSH(VBScript)でバイナリファイルを利用する (08/09)
iTunesとChromeがうまく連携しない件(解決) (01/09)
FC2のメール連作先 (12/26)
ChromeとiTunesが連携しない (10/14)
最近のコメント
agloo:ChromeとiTunesが連携しない (12/26)
agloo:PHPでフォームを介さずにGETとPOSTを送信する (12/26)
最近のトラックバック
月別アーカイブ
2012年04月 (1)
2011年08月 (1)
2011年01月 (1)
2010年12月 (1)
2010年10月 (1)
2010年08月 (1)
2010年07月 (1)
2010年06月 (1)
2010年05月 (3)
2010年04月 (2)
2010年03月 (1)
2010年02月 (4)
2010年01月 (4)
2009年12月 (1)
2009年11月 (1)
2009年08月 (1)
2009年07月 (5)
2009年06月 (3)
2009年05月 (5)
2009年02月 (1)
2009年01月 (1)
2008年12月 (1)
2008年10月 (6)
2008年08月 (1)
2008年07月 (4)
2008年04月 (3)
2008年02月 (4)
2008年01月 (1)
2007年06月 (1)
2007年04月 (3)
2007年03月 (3)
2007年02月 (6)
カテゴリー
未分類 (1)
Windows (8)
PC関係 (38)
WEB (4)
.NET (2)
C# (4)
VMWARE (1)
ネット (4)
ゲーム (0)
映画 (0)
お出かけ (0)
携帯 (1)
技術系 (1)
CCNA (1)
iPhone (2)
Twitter (2)
TechNet (2)
WPF (0)
FC2 (1)
WSH (1)
ブロとも申請フォーム
この人とブロともになる
ブログ内検索
RSSフィード
最新記事のRSS
最新コメントのRSS
最新トラックバックのRSS
リンク
管理者ページ
このブログをリンクに追加する
By FC2ブログ
ブログやるならFC2ブログ
スポンサーサイト
上記の広告は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
- ジャンル:
コンピュータ
【2007/04/24 18:51】
|
PC関係
|
TRACKBACK(0)
|
COMMENT(2)
<<
QT Address Bar
|
BLOG TOP
|
テンプレート修正
>>
この記事に対する
コメント
承認待ちコメント
このコメントは管理者の承認待ちです
【2010/09/02 03:54】 | # [
編集
]
Re: タイトルなし
> 活用させて頂くときに気付いたのですが
> GETで送信する場合に
>
> $host = "localhost"
>
> が抜けている様です。
ああ、確かに抜けていますね。
さっそく修正しました。
ご指摘ありがとうございます。
【2010/12/26 21:43】 URL | agloo #- [
編集
]
この記事に対する
コメントの投稿
NAME:
SUBJECT
MAIL:
URL:
COMMENT:
PASS:
SECRET:
管理者にだけ表示を許可する
|
BLOG TOP
|
この記事に対するトラックバック
この記事にトラックバックする(FC2ブログユーザー)
トラックバックURL
→http://agloo.blog92.fc2.com/tb.php/30-d08d4034
powered by
FC2ブログ
. Copryright © Take a Rest All Rights Reserved.
FC2Ad
FC2ブログ