@xxliixin1993
2015-12-30T01:54:05.000000Z
字数 4187
阅读 2058
php
CURL流程图
GET简单例子:
<?php//GET//初始化$ch = curl_init();//设置选项,包括URL,默认是以GET请求curl_setopt($ch, CURLOPT_URL, "www.baidu.com");curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);curl_setopt($ch, CURLOPT_HEADER, 0);//执行并获取HTML文档内容$output = curl_exec($ch);//释放curl句柄curl_close($ch);//打印获得的数据print_r($output);
POST简单例子:
curl.php<?php//POST//初始化$curl = curl_init();$url='www.test.com/test.php';$data=array("testDate" => "hello world",);//设置抓取的urlcurl_setopt($curl, CURLOPT_URL, $url);//设置头文件的信息作为数据流输出curl_setopt($curl, CURLOPT_HEADER, 1);//设置获取的信息以文件流的形式返回,而不是直接输出。curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);//设置post方式提交curl_setopt($curl, CURLOPT_POST, 1);//设置post数据curl_setopt($curl, CURLOPT_POSTFIELDS, $data);//执行命令$data = curl_exec($curl);//关闭URL请求curl_close($curl);//显示获得的数据print_r($data);?>www.test.php/test.php<?phpecho $_POST['testDate'];?>
输出:
HTTP/1.1 100 Continue
HTTP/1.1 200 OK
Server: nginx/1.8.0
Date: Mon, 23 Nov 2015 04:50:26 GMT
Content-Type: text/html
Transfer-Encoding: chunked
Connection: keep-alive
X-Powered-By: PHP/5.6.15
hello world
curl_setopt()函数:
curl_setopt ( resource $ch , int $option , mixed $value )
| 选项 | 说明 |
|---|---|
| CURLOPT_HEADER | 启用时会将头文件的信息作为数据流输出 |
| CURLOPT_AUTOREFERER | 当根据Location:重定向时,自动设置header中的Referer:信息。(可选true或false) |
| CURLOPT_POST | 启用时会发送一个常规的POST请求,类型为:application/x-www-form-urlencoded,就像表单提交的一样 |
| CURLOPT_POSTFIELDS | 全部数据使用HTTP协议中的"POST"操作来发送。要发送文件,在文件名前面加上@前缀并使用完整路径。这个参数可以通过urlencoded后的字符串类似'para1=val1¶2=val2&...'或使用一个以字段名为键值,字段数据为值的数组。如果value是一个数组,Content-Type头将会被设置成multipart/form-data |
| CURLOPT_PUT | 启用时允许HTTP发送文件,必须同时设置CURLOPT_INFILE和CURLOPT_INFILESIZE |
| CURLOPT_INFILE | 在上传文件的时候需要读取的文件地址,值是一个资源类型 |
| CURLOPT_INFILESIZE | 设定上传文件的大小限制,字节(byte)为单位 |
| CURLOPT_BINARYTRANSFER | true表示用返回原始输出 |
| CURLOPT_FAILONERROR | 显示HTTP状态码,默认行为是忽略编号小于等于400的HTTP信息 |
| CURLOPT_FORBID_REUSE | 在完成交互以后强迫断开连接,不能重用 |
| CURLOPT_FRESH_CONNECT | 强制获取一个新的连接,替代缓存中的连接 |
| CURLOPT_NOBODY | 启用时将不对HTML中的BODY部分进行输出 |
| CURLOPT_FILETIME | 启用时会尝试修改远程文档中的信息。结果信息会通过curl_getinfo()函数的CURLINFO_FILETIME选项返回。 curl_getinfo() |
| CURLOPT_CRLF | 启用时将Unix的换行符转换成回车换行符 |
| CURLOPT_COOKIESESSION | 启用时curl会仅仅传递一个session cookie,忽略其他的cookie,默认状况下cURL会将所有的cookie返回给服务端。session cookie是指那些用来判断服务器端的session是否有效而存在的cookie |
curl_getinfo()函数:
获取一个cURL连接资源句柄的信息
curl_getinfo ( resource $ch [, int $opt = 0 ] )
例:
获取响应码:
$responseData = curl_getinfo($ch);
Array
(
[url] => HTTP://m.fang.com/
[content_type] => text/html; charset=gb2312
[http_code] => 200
[header_size] => 265
[request_size] => 49
[filetime] => -1
[ssl_verify_result] => 0
[redirect_count] => 0
[total_time] => 0.143788
[namelookup_time] => 0.012269
[connect_time] => 0.018964
[pretransfer_time] => 0.019034
[size_upload] => 0
[size_download] => 69795
[speed_download] => 485402
[speed_upload] => 0
[download_content_length] => -1
[upload_content_length] => 0
[starttransfer_time] => 0.029366
[redirect_time] => 0
[redirect_url] =>
[primary_ip] => 124.251.50.91
[certinfo] => Array
(
)
[primary_port] => 80
[local_ip] => 192.168.110.164
[local_port] => 40025
)
详细参数说明见php官方手册
封装的Curl类
<?phpclass Curl {/*** curl句柄*/public $curl;/*** 响应数据*/public $output;/*** 请求url*/public $url;public function __construct($url){//初始化$this->curl = curl_init();$this->url = $url;}public function getMethod($cookie=''){//设置选项,包括URLcurl_setopt($this->curl, CURLOPT_HEADER, 1); // 返回header部分//重定向curl_setopt($this->curl, CURLOPT_FOLLOWLOCATION, 1);curl_setopt($this->curl, CURLOPT_URL, $this->url);//User-agent设置curl_setopt($this->curl, CURLOPT_USERAGENT, 'LearnForPHP');//超时时长curl_setopt($this->curl, CURLOPT_TIMEOUT, 10);//设置自定义头部curl_setopt($this->curl, CURLOPT_HTTPHEADER, array( "Content-type: text/xml"));if (!empty($cookie)){curl_setopt($this->curl, CURLOPT_COOKIE,$cookie);}//curl_setopt($this->curl, CURLOPT_RETURNTRANSFER, 1);}/*** $data array*/public function postMethod($data){//设置抓取的urlcurl_setopt($this->curl, CURLOPT_URL, $this->url);//设置头文件的信息作为数据流输出curl_setopt($this->curl, CURLOPT_HEADER, 1);//设置获取的信息以文件流的形式返回,而不是直接输出。curl_setopt($this->curl, CURLOPT_RETURNTRANSFER, 1);//设置post方式提交curl_setopt($this->curl, CURLOPT_POST, 1);//设置post数据curl_setopt($this->curl, CURLOPT_POSTFIELDS, $data);//curl_setopt($this->curl, CURLOPT_FOLLOWLOCATION, 1); //重定向}public function exec(){//执行并获取HTML文档内容$this->output = curl_exec($this->curl);//释放curl句柄curl_close($this->curl);return $this->output;}}$curl = new Curl('https://www.zhihu.com/');$curl->getMethod($cookie);print_r($curl->exec());