`
ling凌yue月
  • 浏览: 338655 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
社区版块
存档分类
最新评论

php curl post数据类

    博客分类:
  • php
阅读更多

 

class PostData
{
	
	private $postURL; //要请求的url地址
	private $postData; //提交的数据 key=>value方式
	
	/**
	 * 表示应答信息
	 * @var unknown_type
	 */
	private $responseBody; 
	
	/**
	 * 表示应答头信息
	 * @var unknown_type
	 */
	private $responseHead; 
	
	/**
	 * 
	 * @var unknown_type
	 */
	private $errMessage = ''; //返回的错误信息
	
	public $CRLF = "\r\n";
	public $sCookieFile = 'E:/tmp.cookie';
	
	/**
	* 构造方法
	*
	* @author 
	* @param 要请求的url地址
	* @param 要提交的数据
	 */
	function __construct($url='', $data='')
	{
		$this->setPostURL($url);
		$this->setPostData($data);
	}
	
	/**
	* 设置url的值
	*
	* @author 
	* @param 要请求的url地址
	 */
	public function setPostURL($url)
	{
		$this->postURL = $url;
	}
	
	/**
	* 设置data的值
	*
	* @author 
	* @param 要提交的数据
	 */
	public function setPostData($data)
	{
		$this->postData = $data;
	}
	
	/**
	 * 
	* 返回错误信息
	*
	* @author 
	* @param type 说明
	* @return 返回说明
	 */
	public function getErrMessage()
	{
		return $this->errMessage;
	}
	
	/**
	* 返回应答信息
	*
	* @author 
	* @param type 说明
	* @return 返回说明
	 */
	public function getResponseBody()
	{
		return $this->responseBody;
	}
	
	/**
	* 返回应答头信息
	*
	* @author 
	* @param type 说明
	* @return 返回说明
	 */
	public function getResponseHead()
	{
		return $this->responseHead;
	}
	
	/**
	 * <br />
	 * <span><strong>此方法已过期,不建议用,请用curlpost</strong></span><br /><br />
	* 将$this->data提交到$this->url
	*
	* @author 
	* @param postType 提交形式,post或是get
	* @param extensionalHeader 扩展的头文件。格式:array('Host' => 'Host: www.example.com','Connection' => 'Connection: close')
	* @return 返回的数据
	* 
	 */
	public function sendpost($postType='POST' ,$extensionalheader = array())
	{
		$url = $this->postURL;
		$data = $this->postData == '' || !isset($this->postData) ? array() : $this->postData;
		//先解析url
		$url = parse_url($url);
		$url_port = !isset($url['port']) ? (($url['scheme'] == 'http') ? 80 : 443) : $url['port'];
		if (!$url)
		{
			$this->errMessage = "couldn't parse url";
			return false;
		}
		//将参数拼成URL key1=value1&key2=value2 的形式
		$encoded = "";
		while (list($k, $v) = each($data))
		{
			$encoded .= ($encoded ? '&' : '');
			$encoded .= rawurlencode($k)."=".rawurlencode($v);
		}
		//echo $encoded;exit;
		$len = strlen($encoded);
		//拼上http头
		$out = "{$postType} ".$url['path'].(isset($url['query']) ? ('?'.$url['query']) : '')." HTTP/1.1".$this->CRLF;
		$host = "Host:".$url['host'];
		$content_type = 'Content-type: application/x-www-form-urlencoded';
		$connection = 'Connection: close';
		$iheads = array(
				'Host' => $host,
				'Content-type' => $content_type,
				'Connection' => $connection,
				);
		$heads = array_merge($iheads, $extensionalheader);
		foreach ($heads as $k => $v)
		{
			$out .= $v.$this->CRLF;
		}
		$out .= "Content-Length: $len".$this->CRLF;
		$out .= $this->CRLF;
		$out .= $encoded.$this->CRLF;

		//打开一个sock
		$fp = @fsockopen($url['host'], $url_port);
		$line = "";
		if (!$fp)
		{
			$this->errMessage = "{$errstr}({$errno})\n";
			return false;
		}
		else
		{
			fwrite($fp,$out);
			while (!feof($fp))
			{
				$line .= fgets($fp, 2048);
			}
		}
		if ($line)
		{
			$head = substr($line, 0, strpos($line, $this->CRLF.$this->CRLF));
			$body = stristr($line, $this->CRLF.$this->CRLF);
			$body = substr($body, 4, strlen($body));
		}
		fclose($fp);
		$this->responseHead = $head;
		$this->responseBody = $body;
		return $line;
	}
	
	/**
	* 
	* 用curl向指定url提交数据
	*
	* @author 
	* @param $sendType str 提交类型 【可选】
	* @param $extensionalheader array 附加头 【可选】
	* @param $sendCookieFile boolean 是否发送cookie文件的路径 【可选】 默认路径为 tmp.cookie
	* @param $saveCookieFile boolean 是否保存cookie文件的路径 【可选】默认路径为 tmp.cookie
	* @param $cookie string 要发送的cookie字符串  比sendCookie参数优先级低如果已有sendCookie 则此选项无效【可选】
	* @return 返回 返回的数据
	 */
	public function curlpost($sendType = 'POST' ,$extensionalheader = array()
			, $sendCookieFile = false, $saveCookieFile = false, $cookie = false)
	{
		$url = $this->postURL;
		$data = $this->postData;
		$aurl = parse_url($url);
		$encoded = "";
		
		//$sCookieFile = tempnam('.','cookie');
		
		while (list($k, $v) = each($data))
		{
			$encoded .= ($encoded ? '&' : '');
			$encoded .= rawurlencode($k)."=".rawurlencode($v);
		}
		
		$ch = curl_init();										//初始化CURL句柄
		curl_setopt($ch, CURLOPT_URL, $url); 					//设置请求的URL
		curl_setopt($ch, CURLOPT_HEADER, 1);
		
		//*-----------------设置发送cookie
		if ($sendCookieFile)
		{
			curl_setopt($ch, CURLOPT_COOKIEFILE, $this->sCookieFile);
		}
		else if ($cookie)
		{
			curl_setopt($ch, CURLOPT_COOKIE, $cookie);
		}
		//设置保存cookie
		if ($saveCookieFile)
		{
			curl_setopt($ch, CURLOPT_COOKIEJAR, $this->sCookieFile);
		}
		//-------------------------------*/
		
		curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);			// 设为TRUE把curl_exec()结果转化为字串,而不是直接输出
		
		if ($sendType != 'GET')
		{
			curl_setopt($ch, CURLOPT_POST, 1);					//启用POST提交
			curl_setopt($ch, CURLOPT_POSTFIELDS, $encoded); 	//设置POST提交的字符串
		}
		
		$host = $aurl['host'];
		
		$iheads = array(
				'Host' => $host
				,'Content-type' => 'Content-type: application/x-www-form-urlencoded'
				,'Connection' => 'Connection: close'
			);
		$heads = array_merge($iheads, $extensionalheader);
		curl_setopt($ch, CURLOPT_HTTPHEADER, $heads);			//设置HTTP头信息
		
		//curl_setopt($ch, CURLOPT_COOKIEFILE, $sCookieFile);		//从$sCookieFile文件里得到信息
		//file_put_contents($sCookieFile, '');
		//curl_setopt($ch, CURLOPT_COOKIEJAR, $sCookieFile);		//保存cookie信息到$sCookieFile文件里
		
		$document = curl_exec($ch);								//执行预定义的CURL
		$this->errMessage = curl_error($ch);
		
		$info = curl_getinfo($ch);
		curl_close($ch);
		$this->responseHead = substr($document, 0, $info['header_size']);
		$this->responseBody = substr($document, $info['header_size']);
		return $document;
	}
	/**
	 * 
	* 清除cookie文件中的内容
	*
	* @author 
	* @param type 说明
	* @return 返回说明
	 */
	function clearCookie()
	{
		file_put_contents($this->sCookieFile, '');
	}
}
分享到:
评论

相关推荐

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

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

    php中curl的get,post通用类

    一个PHP curl get post通用类,curl 通用方法 。。get /post 传送数据,设置发送方式 0 get 1 post。具有很好的参考价值,朋友们如果喜欢可以下载,如果有更好的curl类可以发布到我们php中文网,大家一起学习交流。

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

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

    php中curl的get,post通用类.zip

    一个PHP curl get post通用类,curl 通用方法 。。get /post 传送数据,设置发送方式 0 get 1 post。具有很好的参考价值,朋友们如果喜欢可以下载,如果有更好的curl类可以发布到我们php中文网,大家一起学习交流。

    php的curl抓数据专用.zip

    2. 设置请求选项:`curl_setopt()`是设置cURL会话参数的关键函数,如URL、请求方法(GET、POST等)、超时时间、头信息、POST数据等。 3. 执行请求:`curl_exec()`执行之前配置的cURL会话,获取服务器响应。 4. 获取...

    php-curl+ajax+json数据传输2.0版本

    总结起来,"php-curl+ajax+json数据传输2.0版本"是利用PHP-cURL解决AJAX跨域请求的一种解决方案,它结合了AJAX的异步特性、JSON的数据交换优势以及cURL的服务器端请求处理能力。这个组合可以实现高效、安全的数据...

    CUrlHttp封装curl类

    - **表单提交**:表单提交通常涉及POST请求,但CUrlHttp类可能会提供一个专门的`submitForm()`方法,处理表单字段和值,自动构造POST数据。 3. **curl选项设置** CUrlHttp类通过`setOpt()`方法,允许开发者设置...

    php应用curl扩展抓取网页类.zip

    在PHP开发中,有时我们需要从远程网站获取数据...总之,`php应用curl扩展抓取网页类.zip`提供的这个PHP类库,结合cURL扩展,为开发者提供了一种高效、灵活的方式来抓取和处理远程网页数据,是Web开发中的一种实用工具。

    php的curl整合类.zip

    这个"php的curl整合类.zip"文件提供了一个封装好的PHP类,使得开发者可以更方便地利用cURL功能,模拟各种浏览器行为,执行自动化网站操作。下面将详细阐述cURL库的原理以及如何使用这个整合类。 1. **cURL库介绍** ...

    PHP封装CURL扩展类.zip

    CURL允许开发者从命令行或在代码中发起网络请求,执行文件上传、下载、POST数据、设置自定义HTTP头等操作。然而,直接使用CURL函数可能会使代码变得冗长且难以维护。为了解决这个问题,开发者经常会选择封装CURL功能...

    php的curl登录采集的类.zip

    总的来说,"php的curl登录采集的类.zip"文件提供了一个强大的工具,帮助开发者轻松地处理复杂的登录和数据抓取任务。通过理解cURL的工作原理以及这个类的内部实现,我们可以更有效地利用这个类库进行PHP的网络操作。

    php扩展 php_curl

    3. **高级功能**:`php_curl`支持多种HTTP方法(GET、POST、PUT等),可以设置HTTP头,进行POST数据提交,处理cookies,使用代理服务器,以及进行SSL连接。还可以通过设置选项实现自动重定向、超时控制、错误处理等...

    PHP Post And Get Class,封装Curl,可带cookie,让post/get更简单方便。带例程

    在cUrl中,可以使用`curl_setopt`函数设置`CURLOPT_POSTFIELDS`选项来提交POST数据。而在我们的类中,可能已经封装了一个方法,如`postRequest($url, $postData)`,该方法接受URL和一个包含POST参数的数组,然后使用...

    curl类的php完整源码

    它们可以帮助我们理解`class.curl.php`中的类是如何工作的,通过查看这些示例,我们可以学习如何设置不同的请求参数,如URL、POST数据、HTTP头等,并获取返回的结果。 `dumpState.php`可能是一个用来调试或展示`...

    php的curl封装类

    一个php的curl封装类,基础发起curl请求函数,来源一定要设置成来自本站,要求结果为字符串且输出到屏幕上,发起get请求,发起post请求,处理发起非get请求的传输数据,发起put请求,发起delete请求。

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

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

    php curl nginx 499 错误

    PHP的cURL库用于从服务器获取数据,它通过建立TCP连接发送HTTP请求。当出现499错误时,问题可能出在以下几个方面: 1. **超时设置**:cURL有一个超时设置,默认情况下,如果在指定时间内未收到任何数据,它将关闭...

    php的curl封装类用法实例.zip

    - **POST请求**:可以设置`CURLOPT_POSTFIELDS`发送POST数据。 - **上传文件**:使用`CURLOPT_UPLOAD`和`CURLOPT_INFILE`进行文件上传。 - **处理cookies**:利用`CURLOPT_COOKIEJAR`和`CURLOPT_COOKIEFILE`管理...

    curlAction.class_oracle_phpCURL请求类_

    `curlAction.class_oracle_phpCURL请求类` 的标题暗示了这个类可能特别关注于与 Oracle 数据库相关的 HTTP 请求处理。Oracle 数据库通常用于处理大规模的企业级数据,而通过 PHP 的 `cURL` 实现与数据库的接口通信,...

    php curl模仿form表单提交图片或文件

    2. **设置POST数据** 当我们想要提交表单数据时,可以使用`curl_setopt()`函数设置`CURLOPT_POSTFIELDS`选项。对于文件上传,我们需要将文件路径作为值,文件名作为键。例如: ```php $postFields = array( '...

Global site tag (gtag.js) - Google Analytics