0

0

php中curl实现GET和POST请求抓取网页或上传文件

php中文网

php中文网

发布时间:2016-05-22 18:38:38

|

1234人浏览过

|

来源于php中文网

原创

curl函数的强大之处就可以像用户一样的去访问一个网页并且可以是php所能接受的所有数据提交模式了,下面我们来看一个php中curl实现get和post请求抓取网页或上传文件的例子并且它还支持跨项目和跨服务器的哦。

一:curl 函数和参数详解

函数库:

1:curl_init 初始化一个curl会话

2:curl_close 关闭一个curl会话

立即学习PHP免费学习笔记(深入)”;

3:curl_setopt 为一个curl设置会话参数

4:curl_error 返回一个包含当前会话错误信息的字符串

5:curl_exec 执行一个curl会话

6:curl_multi_add_handle 向curl批处理会话中添加单独的curl句柄资源

7:curl_multi_close 关闭一个批处理句柄资源

8:curl_multi_exec 解析一个curl批处理句柄

9:curl_multi_getcontent 返回获取的输出的文本流

10:curl_multi_info_read 获取当前解析的curl的相关传输信息

11:curl_multi_init 初始化一个curl批处理句柄资源

12:curl_multi_remove_handle 移除curl批处理句柄资源中的某个句柄资源

13:curl_multi_select 阻塞直到cURL批处理连接中有活动连接

14:curl_setopt_array 以数组的形式为一个curl设置会话参数

15:curl_version 获取curl相关的版本信息

16:curl_getinfo 获取一个curl连接资源句柄的信息

17:curl_copy_handle 拷贝一个curl连接资源的所有内容和参数

18:curl_errno 返回一个包含当前会话错误信息的数字编号

curl_setopt常用可设置参数:

CURLOPT_URL 请求的url地址

CURLOPT_RETURNTRANSFER 设置是否获取数据返回,数据以文件流的形式返回,不是直接输出

CURLOPT_POST 设置是否POST请求,类型为:application/x-www-form-urlencoded,跟表单提交一样

CURLOPT_POSTFIELDS POST请求的数据

CURLOPT_HEADER 启用时会将头文件的信息作为数据流输出

Clippah
Clippah

AI驱动的创意视频处理平台

下载

CURLOPT_HTTPGET 启用时会设置HTTP的method为GET,默认是GET

二:curl GET 方式

三:POST 方式

$url = "http://localhost/ceshi.php";
$post_data = array ("username" => "ceshi","pwd" => "sada&1dsw1","key"=>"ha");
$ch = curl_init();//初始化curl
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);//请求所带变量数据
$output = curl_exec($ch);//执行获取返回数据,返回的数据建议json_encode($return_data);
curl_close($ch);
$output =json_decode($output );//解析返回数据

四:curl POST 方式上传文件

$post_data=array("Filedata"=>"@".$image_file);//利用数组传值,image_file为图片地址,@不能少,标明是一个文件
$url = "http://localhost/ceshi.php";
$ch = curl_init(); //初始化curl
curl_setopt($ch, CURLOPT_URL, $url);//设置链接
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);//设置是否返回信息
curl_setopt($ch, CURLOPT_POST, true);//设置为POST方式
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);//POST数据
$result = curl_exec($ch);//接收返回信息
if(curl_errno($ch)){//出错则显示错误信息
die(json_encode($ch));
}
curl_close($ch); //关闭curl链接
if (ord($result[0])==239 && ord($result[1])==187&&ord($result[2])== 191){
$result = substr( $result,3);//解决Bom头带来的json_decode为空的bug,Bom头是固定的,可以检测后去除掉
}
$result=json_decode($result);
?>

五:curl POST 文件上传常见问题和解决办法:

1:curl_setopt设置CURLOPT_POSTFIELDS 传值是个数组,后端一直无法获取数据$_POST的值

错误现象:

如果$post_data是数组(包括多维数组)的话会出现"entity is too large"的错误提示,接收数据的receive.php 无法获取curl传过来的数据

原因:

curl POST方法时候,传递一个数组到CURLOPT_POSTFIELDS,curl会把数据编码成 multipart/form-data,如果传递一个URL-encoded字符串时,数据会被编码成 application/x-www-form-urlencoded,对于multipart/form-data的编码方式其实相当于我们直接以"enctype="multipart/form-data" method="post" 这样的表单进行操作

解决办法:

a:

对$post_data 数组经 urlencode() 编码后进行字符串连接,

例:$post_data="&name=urlencode($name)&pwd=usrlencode($pwd)"

b:

直接利用http_build_query()进行参数的拼接。

ps:

"multipart/form-data" 是把表单设置为MIME编码,目的是用来传输二进制文件的,若想上传文件,必须用这个编码(例子见上面的curl POST上传文件的例子);但是普通的url数据使用的是"application/x-www-form-urlencoded" 格式。

2:curl请求返回数据头部多了三个字节,post请求后端是以json_encode 数据格式返回,进行json_decode后返回值始终为空

原因:bom头搞的鬼,bom头:在Windows下用记事本之类的程序将文本文件保存为UTF-8格式时,记事本会在文件头前面加上几个不可见的字符(EF BB BF),就是所谓的BOM(Byte order Mark),就是这前面多了三个字节导致json_decode后返回值为空

对返回值进行bom头检测检测:

echo substr( $result, 0, 1 ); //看到一个乱码
echo substr( $result, 0, 2 ); //看到两个乱码
echo substr( $result, 0, 3 ); //空白
echo substr( $result, 0, 4 ); //看到o

证明确实是bom头的问题

解决办法:

if ( ord( $result[0] ) == 239 && ord( $result[1] ) == 187&& ord( $result[2] ) == 191 ) {
    $result = substr( $result, 3 );//Bom头是固定的,可以检测后去除掉
}


教程链接:

随意转载~但请保留教程地址★

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
go语言 注释编码
go语言 注释编码

本专题整合了go语言注释、注释规范等等内容,阅读专题下面的文章了解更多详细内容。

32

2026.01.31

go语言 math包
go语言 math包

本专题整合了go语言math包相关内容,阅读专题下面的文章了解更多详细内容。

23

2026.01.31

go语言输入函数
go语言输入函数

本专题整合了go语言输入相关教程内容,阅读专题下面的文章了解更多详细内容。

16

2026.01.31

golang 循环遍历
golang 循环遍历

本专题整合了golang循环遍历相关教程,阅读专题下面的文章了解更多详细内容。

5

2026.01.31

Golang人工智能合集
Golang人工智能合集

本专题整合了Golang人工智能相关内容,阅读专题下面的文章了解更多详细内容。

6

2026.01.31

2026赚钱平台入口大全
2026赚钱平台入口大全

2026年最新赚钱平台入口汇总,涵盖任务众包、内容创作、电商运营、技能变现等多类正规渠道,助你轻松开启副业增收之路。阅读专题下面的文章了解更多详细内容。

268

2026.01.31

高干文在线阅读网站大全
高干文在线阅读网站大全

汇集热门1v1高干文免费阅读资源,涵盖都市言情、京味大院、军旅高干等经典题材,情节紧凑、人物鲜明。阅读专题下面的文章了解更多详细内容。

195

2026.01.31

无需付费的漫画app大全
无需付费的漫画app大全

想找真正免费又无套路的漫画App?本合集精选多款永久免费、资源丰富、无广告干扰的优质漫画应用,涵盖国漫、日漫、韩漫及经典老番,满足各类阅读需求。阅读专题下面的文章了解更多详细内容。

170

2026.01.31

漫画免费在线观看地址大全
漫画免费在线观看地址大全

想找免费又资源丰富的漫画网站?本合集精选2025-2026年热门平台,涵盖国漫、日漫、韩漫等多类型作品,支持高清流畅阅读与离线缓存。阅读专题下面的文章了解更多详细内容。

85

2026.01.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
【web前端】Node.js快速入门
【web前端】Node.js快速入门

共16课时 | 2万人学习

开源物联网开发实例
开源物联网开发实例

共6课时 | 0.4万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号