@xxliixin1993
2015-12-30T09:54:05.000000Z
字数 4187
阅读 1818
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",
);
//设置抓取的url
curl_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
<?php
echo $_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类
<?php
class Curl {
/**
* curl句柄
*/
public $curl;
/**
* 响应数据
*/
public $output;
/**
* 请求url
*/
public $url;
public function __construct($url){
//初始化
$this->curl = curl_init();
$this->url = $url;
}
public function getMethod($cookie=''){
//设置选项,包括URL
curl_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){
//设置抓取的url
curl_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());