`

PHP三种模拟POST方式总结

    博客分类:
  • php
 
阅读更多
<?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;
} 

 

分享到:
评论

相关推荐

    发送POST请求的三种方式的php类.zip

    介绍一个发送POST请求的三种方式的php类,PHP发送POST请求的三种方式 分别使用curl file_get_content fsocket 来实现post提交数据。

    PHP模拟POST登录

    PHP POST数据的三种方法 php有三种方法可以post数据,分别为Curl、socket、file_get_contents:

    PHP基于curl模拟post提交json数据示例.docx

    本文主要介绍了 PHP 基于 curl 模拟 post 提交 json 数据操作,通过实例形式分析了 PHP 使用 curl 实现 post 方式提交 json 数据相关操作步骤与留意事项。下面是文章的详细介绍: 首先,需要了解什么是 curl?curl ...

    PHP POST提交方式

    在实际开发中,开发者可以借助各种工具来调试POST请求,如Postman,它是一款强大的API测试工具,可以方便地模拟POST请求,查看响应结果。 总结,PHP的POST提交方式是处理表单数据的重要手段,理解其工作原理和使用...

    发送POST请求的三种方式的php类

    这里我们将详细探讨使用cURL、`file_get_contents`和fsocket三种方法来实现POST请求。 1. cURL(Client URL Library): cURL是PHP中最常用的方法,功能强大且灵活。cURL库提供了丰富的选项来定制HTTP请求,包括...

    php模拟post请求类.zip

    这个“php模拟post请求类.zip”文件提供了一个PHP类库,专门用于创建这样的请求。以下是对这个类库及其核心概念的详细解释。 1. **HTTP POST请求**: HTTP POST请求是向服务器发送数据的一种方法,常用于提交表单...

    PHP基于curl模拟post提交json数据示例

    主要介绍了PHP基于curl模拟post提交json数据操作,结合实例形式分析了php使用curl实现post方式提交json数据相关操作步骤与注意事项,代码简单实用,需要的朋友可以参考下

    PHP版SOCKET模拟提交POST消息(源码)

    在IT行业中,网络通信是至...总的来说,PHP的SOCKET功能为我们提供了一种灵活且强大的工具,可以用来实现各种网络通信任务,包括模拟POST提交。理解并掌握这种技术,对于提升PHP开发者的技能和解决问题的能力大有裨益。

    php 模拟 post get 请求类文件 十分好用

    一般的防请求的都能跳过 静态类调用........

    php模拟POST提交的4种方法.pdf

    在PHP编程中,有时我们需要模拟HTTP POST请求,例如...以上就是PHP中模拟POST提交的四种方法。根据项目需求和偏好,可以选择合适的方法。cURL通常是最常用且功能最强大的选择,而其他方法则适用于更简单或特定的情况。

    php模拟post行为代码总结(POST方式不是绝对安全)

    这里提供两种方法供选择:第一:手写代码。第二:利用HttpClient php类库 第一种方法: 复制代码 代码如下: &lt;?PHP $flag = 0; //要post的数据 $argv = array( ‘var1’=&gt;’abc’, ‘var2’=&gt;’你好吗’); //构造...

    http模拟POST表单上传文件

    在本文中,我们将深入探讨如何通过模拟POST表单上传文件到服务器,这是一项常见的任务,尤其在开发Web应用程序时。我们将涵盖客户端如何构建请求以及服务器如何接收和处理这些请求。 首先,让我们理解POST请求的...

    php 模拟POST提交的2种方法详解

    在PHP中,模拟POST提交是常见的任务,常用于自动化测试、数据抓取或者与外部API交互。本文将详细解析两种实现方法:cURL和fsockopen。 ### 一、使用cURL模拟POST提交 cURL是PHP的一个强大库,可以处理各种HTTP请求...

    php实现模拟post请求用法实例

    本文将详细探讨PHP实现模拟POST请求的三种常用方法,并提供相应的代码示例和解释。 ### 使用cURL模拟POST请求 cURL是一个强大的库,用于发送请求和获取响应。在PHP中使用cURL模拟POST请求,需要使用curl_init()...

    PHP使用curl模拟post上传及接收文件的方法

    总结来说,PHP使用cURL模拟post上传及接收文件是一个常见且实用的技能,涉及到了cURL的基本使用、文件上传和接收技术、以及网络请求的错误处理等多个方面。掌握这些知识点可以帮助开发者在进行Web开发时,有效地处理...

    php利用CURL模拟进行微信接口的GET与POST类

    php CURL函数可以模仿用户进行一些操作,如我们可以模仿用户提交数据也可以模仿用户进行网站访问了,下面我们来介绍利用CURL模拟进行微信接口的GET与POST例子,例子非常的简单就两个大家一起看看.

Global site tag (gtag.js) - Google Analytics