通过fsockopen函数实现post表单

  • 内容
  • 评论
  • 相关

如何通过PHP实现POST方式提交表单?下面是实现此功能的函数,主要采用了fsockopen函数。

function post($url,$time_out = "60") {
	$urlarr = parse_url($url);			// 解析URL,返回其组成部分
	$errno = "";
	$errstr = "";
	$transports = "";
	if($urlarr["scheme"] == "https") {	// SSL协议
		$transports = "ssl://";
		$urlarr["port"] = "443";
	} else {							// HTTP协议
		$transports = "tcp://";
		$urlarr["port"] = "80";
	}
	$fp = @fsockopen(
		$transports . $urlarr['host'],	// 协议+主机
		$urlarr['port'], 				// 端口
		$errno,
		$errstr, 
		$time_out
	);
	if(!$fp) {
		$info = "ERROR: $errno - $errstr\n";
	} else {
		fputs($fp, "POST " . $urlarr["path"] . " HTTP/1.1\r\n");	// 提交方式,POST || GET
		fputs($fp, "Host: " . $urlarr["host"] . "\r\n");			// 主机
		fputs($fp, "Content-type: application/x-www-form-urlencoded\r\n");
		fputs($fp, "Content-length: " . strlen($urlarr["query"]) . "\r\n");
		fputs($fp, "Connection: close\r\n\r\n");
		fputs($fp, $urlarr["query"] . "\r\n\r\n");					// POST表单数据
		while(!feof($fp)) {
			$info[] = @fgets($fp, 1024);
		}
		fclose($fp);
		$info = implode(",",$info);
		while (list ($key, $val) = each ($_POST)) {
			$arg .= $key . "=" . $val . "&";
		}
		return $info;
	}
}

实现PHP自动POST表单的举例:

if($_POST['submit'])
{
	//处理POST数据
}
else 
{
	echo post("http://{$_SERVER['HTTP_HOST']}{$_SERVER['PHP_SELF']}?varname=the value&submit=Submit+Request");
}

评论

0条评论

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注