easyGowin’

Welcome to our weblogs!
にほんブログ村・いろはすピープル
にほんブログ村
<< January 2012 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 >>
 
RECENT COMMENT
MOBILE
qrcode
無料ブログ作成サービス JUGEM
 
サーバ側でPOST送信処理(PHP4)
<課題>
POST送信処理を作成。ただし、サーバサイド起動、PHP4。
また、cURLは使えない環境。


まず検索してみました。

cURLを使わずに、PHPでPOSTリクエストを送信する
を発見。

早速コピペして実行。
しかしエラー検出・・・
ソースを見返すと、stream_get_contents(PHP5)が使われています。

なので、もう一度検索。

PHPのちょっとしたTIPS
を発見。

これで出来そうです(作者に感謝!)。

http://のほか、https://も動作するようです。

しかし不具合が起こるケースをひとつ見つけました。
Basic認証の際、パスワードにスラッシュが含まれると、不具合が発生するようです。

そこでちょっとだけ改良してみました。(結果OKです。)

function http($url,$method="GET",$headers="",$post=array(""),$id=array("")) {

/* URLを分解 */
$URL = parse_url($url);

/* クエリー */
if (isset($URL['query'])) {
$URL['query'] = "?".$URL['query'];
} else {
$URL['query'] = "";
}

/* デフォルトのポートは80 */
if (!isset($URL['port'])) $URL['port'] = 80;

/* リクエストライン */
$request = $method." ".$URL['path'].$URL['query']." HTTP/1.0¥r¥n";

/* リクエストヘッダ */
$request .= "Host: ".$URL['host']."¥r¥n";
$request .= "User-Agent: PHP/".phpversion()."¥r¥n";

/* Basic認証用のヘッダ */
if (isset($URL['user']) && isset($URL['pass'])) {
$request .= "Authorization: Basic ".base64_encode($URL['user'].":".$URL['pass'])."¥r¥n";
} else if (isset($id['user']) && isset($id['pass'])) {
$request .= "Authorization: Basic ".base64_encode($id['user'].":".$id['pass'])."¥r¥n";
}

/* 追加ヘッダ */
$request .= $headers;

/* POSTの時はヘッダを追加して末尾にURLエンコードしたデータを添付 */
if (strtoupper($method) == "POST") {
while (list($name, $value) = each($post)) {
$POST[] = $name."=".urlencode($value);
}
$postdata = implode("&", $POST);
$request .= "Content-Type: application/x-www-form-urlencoded¥r¥n";
$request .= "Content-Length: ".strlen($postdata)."¥r¥n";
$request .= "¥r¥n";
$request .= $postdata;
} else {
$request .= "¥r¥n";
}

/* WEBサーバへ接続 */
$fp = fsockopen($URL['host'], $URL['port']);

/* 接続に失敗した時の処理 */
if (!$fp) {
die("ERROR¥n");
}

/* 要求データ送信 */
fputs($fp, $request);

/* 応答データ受信 */
$response = "";
while (!feof($fp)) {
$response .= fgets($fp, 4096);
}

/* 接続を終了 */
fclose($fp);

/* ヘッダ部分とボディ部分を分離 */
$DATA = split("¥r¥n¥r¥n", $response, 2);

/* リクエストヘッダをコメントアウトして出力 */
echo "¥n";

/* レスポンスヘッダをコメントアウトして出力 */
echo "¥n";

/* メッセージボディを出力 */
echo $DATA[1];
}
コメント
from: free downloadable ringtones   2007/09/24 11:42 PM
free downloadable ringtonesコメ
from: kikky   2007/12/17 6:20 AM
SSLでPOSTする場合は
fsockopenに
ssl://
をつける手法もあります。

サーバーにOpenSSLとかが入ってないと使えませんが…
コメントする









 
トラックバック
この記事のトラックバックURL
http://blog.eco.sunnyday.jp/trackback/516112
 

Copyright (C) 2012 JUGEM Some Rights Reserved.