这里总结一下get与post请求的区别:
1. get根据浏览器的不同有所不同,但一般不超过1M;
2. post传递参数的上限是2G, 默认能传递的大小8M,关于能传递参数的长度限制可以在php.ini中配置,post_max_size = 长度。
3. get通过url地址传递参数,post是实体数据,可以通过表单提交大量信息。
在网上查阅了一些资料,现在把curl函数与file_get_contents的区别总结一下:
首先明白一点,file_get_contents()函数和curl函数都可以用来抓取远程内容,什么是抓取全程内容呢?个人理解是获取指定url地址所展示的内容,返回结果的形式类似于打开一个网页后,查看网页源代码显示的内容。file_get_contents()也可以用来读取一个文件里的内容,curl函数支持更多的协议,比如FTP,HTTP,HTTPS,FTPS等。php默认不支持curl功能,需要在php.ini文件里开启,具体配置是去掉 ;extension=php_curl.dll前面的分号,重启Apache即可。
1. curl函数的用法:
使用curl发送url请求,大致分为四步:
(1) 初始化curl会话
$ch = curl_init();
(2) 设置请求选项,应包含具体的url
curl_setopt($ch, CURLOPT_URL, "http://www.baidu.com");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
(3) 执行一个curl会话并获取相关回复
$response = curl_exec($ch);
(4) 释放curl句柄,关闭一个curl会话
cur_close($ch);
2. curl函数可以进行错误处理
在1中的第三步,可以增加以下代码:
if ($response == false) {
echo "错误信息为:" . curl_error($ch);
}
3. 使用curl模拟发送post请求
$url = "http://www.ltyflyme.com/post.php";
$post_data = array(
"name" => "lty",
"url" => "http://www.ltyflyme.com",
"action" => "submit"
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1); //设置请求类型为post
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data); //添加post数据到请求
$response = curl_exec($ch); //执行请求
curl_close($ch);
echo $response;
上面请求发送到post.php中后,通过print_r($_POST)打印出结果如下:
Array(
[name] => lty
[url] => http://www.ltyflyme.com
[action] => submit
)
4. 文件上传
通过curl发送post请求来实现文件上传。实现的代码如下:
$url = "http://www.ltyflyme.com/upload.php";
$post_data = array ("attachment" => "@D:/blog/img1.jap");
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
$response = curl_exec($ch);
curl_close($ch);
print_r($response);
通过以上代码,将本地的img1.jpg上传到本地服务器upload.php中,如果在upload.php中输出上传的信息,则结果为:
Array([attachment] => Array(
[name] => img1.jpg
[type] => application/octet-stream
[tmp_name] => E:\xampp\tmp\phpF27D.tmp
[error] => 0
[size] => 11490
));
5. curl批处理(multi curl)
创建两个curl资源
$ch1 = curl_init();
$ch2 = curl_init();
指定URL和适当的参数
curl_setopt($ch1, CURLOPT_URL, "http://lyy.php.net");
curl_setopt($ch1, CURLOPT_HEADER, 0);
curl_setopt($ch2, CURLOPT_URL, "http://www.php.net");
curl_setopt($ch2, CURLOPT_HEADER, 0);
创建curl批处理句柄
$mh = curl_multi_init();
添加前面两个句柄
curl_multi_add_handle($mh, $ch1);
curl_multi_add_handle($mh, $ch2);
预定义一个状态变量
$active = null;
执行批处理
do {
$mrc = curl_multi_exec($mh, $active);
} while ($mrc == CURLM_CALL_MULTI_PERFORM);
while ($active && $mrc == CURLM_OK) {
if (curl_multi_select($mh) != -1) {
do {
$mrc = curl_multi_exec($mh, $active);
} while ( $mrc == CURLM_CALL_MULTI_PERFORM);
}
}
关闭各个句柄
curl_multi_remove_handle($mh, $ch1);
curl_multi_remove_handle($mh, $ch1);
curl_multi_close($mh);