PHPコーディング

フォームを介さずPOSTする

2009年09月14日
まず、POSTするデータそのものは、
 key1=value1&key2=value2・・・
の形式にします。

$modeと$data['item']をPOSTする場合、
 mode=urlencode(stripslashes($mode)&data[item]=urlencode(stripslashes($data['item'])
となります。
$post_value = "mode=".urlencode(stripslashes($mode)."&data[item]=".urlencode(stripslashes($data['item']);
とします。


//postするURL
$server = "http://sample-site.com/transaction.php";
//URL分解
$url = parse_url($server);
//ポート番号
$port = 80;
//タイムアウトまでの秒数
$timeout = 30;

//ソケット接続オープン
$sock = fsockopen($url['host'], $port, $err_no, $err_msg, $timeout);
//エラーが起こったら、エラーナンバー、エラーメッセージ、$sockにfalseが返される

fputs($sock, "POST " . $url['path'] . " HTTP/1.0\r\n");
fputs($sock, "Host: ".$url['host']."\r\n");
fputs($sock, "Content-Type: application/x-www-form-urlencoded\r\n");
fputs($sock, "Content-length: " .strlen($post_value). "\r\n");
fputs($sock, "User-Agent: request\r\n");
fputs($sock, "\r\n");
fputs($sock, $post_value."\r\n");


postするドメインとpostされるドメインが違う場合はこれで動いていたのですが、ドメインが同じ場合は動きませんでした。
$url['host'] = "localhost";
とすると動きました。