PHP三种模拟POST方式总结

<?php
/*
 * php模拟post提交[三种方式]
 */
$remote_sever = 'http://www.test.com/data.php'; //curl other
$remote_path = '/data.php';//curl other

$remote_sever = 'www.test.com'; //socket
$remote_path = '/data.php';//socket
$post_arr = array(1,3,4,5,7,9,10=>array('name','age','sex'));
$post_string = dataEncode($post_arr);

//$post_string = "name=stelin&age=16";
//$post_string = "age=34&name%5B%5D=3&name%5B%5D=4&name%5B%5D=5";

$result = request_by_socket($remote_sever,$remote_path,$post_string);//已通过测试
//$result = request_by_curl($remote_sever,$post_string); //已通过测试
//$result = request_by_other($remote_sever,$post_string); //已通过测试

var_dump($result);

/**
 * Socket版本
 * 使用方法:
 * $post_string = "app=socket&version=beta";
 * request_by_socket('facebook.cn','/restServer.php',$post_string);
 */
function request_by_socket($remote_server, $remote_path, $post_string, $port = 80, $timeout = 30)
{
	
//		$poststr	= rtrim($this->dataEncode($heros), '&');
		$fp	= fsockopen($remote_server, 80, $errno, $errstr, 10) or die("$errstr($errno)");
		fwrite($fp, "POST $remote_path HTTP/1.1\r\n");
		fwrite($fp, "Host: $remote_server\r\n");
		fwrite($fp, "Content-type: application/x-www-form-urlencoded\r\n");
		fwrite($fp, "Content-Length: ".strlen($post_string)."\r\n");
		fwrite($fp, "Connection: close\r\n\r\n");
		fwrite($fp, $post_string."\r\n\r\n");
		
		$result		= '';
		$isconter	= false;
		$len		= 0;
		while($str=fgets($fp))
		{
			if($isconter==true) $result	.= $str;
			else if($str=="\r\n")
			{
				$isconter	= true;
				if($_SERVER['SERVER_SOFTWARE']!='Microsoft-IIS/6.0') $len		= hexdec(fgets($fp));
			}
		}
		fclose($fp);
		
		if($_SERVER['SERVER_SOFTWARE']!='Microsoft-IIS/6.0') $result	= substr($result, 0, $len);
		return $result;
} 



/**
 * Curl版本
 * 使用方法:
 * $post_string = "app=request&version=beta";
 * request_by_curl('http://facebook.cn/restServer.php',$post_string);
 */
function request_by_curl($remote_server, $post_string)
{
	$ch = curl_init();
	curl_setopt($ch, CURLOPT_URL, $remote_server);
	curl_setopt($ch, CURLOPT_POSTFIELDS, 'mypost=' . $post_string);
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
	curl_setopt($ch, CURLOPT_USERAGENT, "Jimmy's CURL Example beta");
	$data = curl_exec($ch);
	curl_close($ch);
	return $data;
} 


/**
 * 其它版本
 * 使用方法:
 * $post_string = "app=request&version=beta";
 * request_by_other('http://facebook.cn/restServer.php',$post_string);
 */
function request_by_other($remote_server, $post_string)
{
	$context = array(
		'http' => array(
			'method' => 'POST',
			'header' => 'Content-type: application/x-www-form-urlencoded' .
						'\r\n'.'User-Agent : Jimmy\'s POST Example beta' .
						'\r\n'.'Content-length:' . strlen($post_string) + 1,
			'content' =>   $post_string)
		);
	$stream_context = stream_context_create($context);
	$data = file_get_contents($remote_server, false, $stream_context);
	return $data;
}
 /**
 * POST数据组合,url传递多维数组,格式化
 *
 * @internal
 * @param 数组 $data
 * @param 字符串 $keyprefix
 * @param 字符串 $keypostfix
 * @return 字符串
 */
function dataEncode($data, $keyprefix = '', $keypostfix = '')
{
	assert(is_array($data));
	$vars = '';
	foreach ($data as $key => $value)
	{
		if (TRUE == is_array($value)) $vars .= dataEncode($value, $keyprefix . $key . $keypostfix . urlencode('['), urlencode(']'));
		else $vars .= $keyprefix . $key . $keypostfix . '='.urlencode($value) . '&';
	}
	return $vars;
} 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值