掌握CURL:使用PHP扩展发送HTTP请求的完整指南
CURL 是一个极为强大的开源库,它支持诸多协议,像 HTTP、FTP、TELNET 等。我们借助它来发送 HTTP 请求。它给我们带来的益处在于能够通过灵活的选项来设置不同的 HTTP 协议参数,同时还支持 HTTPS。CURL 能够依据 URL 前缀是“HTTP”还是“HTTPS”,自动决定是否加密发送内容。

使用 PHP 扩展中的 CURL 来完成一个 HTTP 请求的发送,通常包含以下几个步骤:
初始化一个连接句柄;对 CURL 设置相关选项;执行操作并获取相应结果;释放之前的 CURL 连接句柄。首先,要进行的是使用 curl 来模拟 GET 请求的操作。
初始化了一个 curl 句柄,使用了 $curl = curl_init(); 这个语句。
要请求的 url 地址是“http://www.conglinfeng.com/together/detail.php?show_ID=5”。
设置 curl 的参数,其中要请求的 url 为 $url ,通过 curl_setopt 函数对 $curl 进行设置,设置的参数为 CURLOPT_URL 。
curl_exec($curl); //执行操作
curl_close($curl); //关闭句柄
执行 curl_exec() 这个操作时,若成功的话,就会输出网页代码,同时返回值是 TRUE;要是失败了,就会返回 FALSE。不过呢,如果 CURLOPT_RETURNTRANSFER 被选中了,情况可能会有所不同。
项被设置后,若函数执行成功,就会返回执行的结果;若函数执行失败,就会返回 FALSE 。
二、使用curl模拟post请求
$curl=curl_init();
$url="./register.php";
设置 cURL 的选项,将 CURLOPT_URL 选项设置为指定的 $url 。具体来说,就是对 $curl 这个 cURL 资源进行操作,把其中的 CURLOPT_URL 选项的值设定为 $url 。
设置请求为 post ,将 curl_setopt 的第一个参数设置为 $curl ,第二个参数设置为 CURLOPT_POST ,并将其值设置为 true 。
- 确认密码:'111111'
要发送的数据被组装成一个数组,其中包含了"986992484@qq.com"。
curl_setopt 函数将 $curl 的 CURLOPT_POSTFIELDS 选项设置为 $post_data ;这是设置 post 的数据内容的操作 。
curl_exec($curl);
curl_close($curl);
register.php:
var_dump($_POST);
三、处理响应的数据
curl_exec()执行时会直接输出响应数据。若不需要直接输出,可添加:curl_setopt($curl, CURLOPT_RETURNTRANSFER, true) 。
$url="./register.php";
curl_setopt($curl, CURLOPT_URL,$url);
curl_setopt($curl, CURLOPT_POST, true); //设置请求为post
$post_data=array('username'=>"嘿嘿",'password'=>'111111','confirm'=>'111111',
使用了 "986992484@qq.com" 这个邮箱地址。
curl_setopt($curl, CURLOPT_POSTFIELDS, $post_data); //post的数据内容
curl_setopt 函数将 $curl 的 CURLOPT_RETURNTRANSFER 选项设置为 true ;在请求执行过程中,不会直接将响应数据输出,而是以返回值的形式来输出响应数据
$res=curl_exec($curl);
echo $res; //少了这句就输不出来了
curl_close($curl);
四、模拟post 文件上传
$url="./register.php";
curl_setopt($curl, CURLOPT_URL,$url);
curl_setopt($curl, CURLOPT_POST, true); //设置请求为post
$post_data 包含一个名为 'logo' 的元素,其值为 '@D:\wamp\wamp\www\czbk\php&mysql\1.png';logo 是 $_FILES 的 name,后面的这个字符串表示图片的路径,加 @ 表明这是一个文件而非字符串。
curl_setopt($curl, CURLOPT_POSTFIELDS, $post_data); //post的数据内容
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true) ; //请求执行时,不将响应数据直接输出,而是以返回值的形式输出响应数据
$res=curl_exec($curl);
echo $res;
curl_close($curl);
五、输出响应头
curl 默认情况下不会输出响应头。如果想要输出响应头,就需要添加:curl_setopt($curl, CURLOPT_HEADER, true)。
该 URL 为“http://www.conglinfeng.com/together/member/index.php”。 此 URL 指向“http://www.conglinfeng.com”网站下的“together/member/index.php”路径。 它代表着一个特定的网络地址,用于访问与“together/member/index.php”相关的页面或资源。 这个地址可能与某个特定的网站或系统相关,用于特定的功能或操作。 例如,可能用于会员相关的页面展示、会员管理或其他与会员相关的活动。 具体的用途和功能取决于该网站或系统的设计和实现。
curl_setopt($curl, CURLOPT_URL,$url);
curl_setopt 函数将 $curl 作为参数,其中 CURLOPT_HEADER 这个选项被设置为 true ,这样做的目的是将响应头输出,而通常情况下默认是不输出响应头的。
HTTP/1.1 返回 200 状态码,表示请求成功。日期为 Thu, 15 Sep 2016 14:49:28 GMT。服务器是 Apache/2.4.4 (Win32) 版本,使用 PHP/5.4.16 进行运行。X-Powered-By 标识为 PHP/5.4.16。内容长度为 692,内容类型为 text/html。
curl_exec($curl);
curl_close($curl);
六、实例:CURL模拟登陆
能够轻松且有效地抓取网页并采集内容,通过设置 cookie 来完成模拟登录网页的操作,cURL 提供了诸多函数,开发者可以从 PHP 手册里获取更多关于 cURL 的信息。此文以模拟登录开源中国(oschina)作为例子,将与大家分享 cURL 的使用。
使用 curl 时需要开启 curl 扩展。
先来看登录部分的代码:
//模拟登录
定义一个名为 login_post 的函数,该函数接收三个参数,分别是 $url、$cookie 和 $post 。
curl 被初始化了,使用的是 curl_init() 函数。
curl_setopt 函数将 $curl 的 CURLOPT_URL 选项设置为 $url ,这是登录提交的地址 。
curl_setopt 函数用于设置 cURL 传输选项。其中,$curl 是 cURL 句柄。CURLOPT_HEADER 是 cURL 的一个选项,用于指定是否显示头信息。这里将 CURLOPT_HEADER 的值设置为 0,即不显示头信息。
curl_setopt 函数将 $curl 的 CURLOPT_RETURNTRANSFER 选项设置为 0 ;此设置用于决定是否自动显示返回的信息 。
curl_setopt 函数将 $curl 的 CURLOPT_COOKIEJAR 选项设置为 $cookie 。这意味着将 Cookie 信息保存在指定的文件中 。
curl_setopt 函数将 $curl 的 CURLOPT_POST 选项设置为 1,这意味着以 post 方式进行提交。
curl_setopt 函数的第一个参数 $curl 表示要设置选项的 cURL 句柄。第二个参数 CURLOPT_POSTFIELDS 表示要设置的选项,用于指定要提交的信息。第三个参数 http_build_query($post) 表示要提交的具体信息,它将数组 $post 转换为 URL 编码的字符串形式。
curl_exec($curl);//执行cURL
关闭 cURL 资源并释放系统资源。
}
函数 login_post()首先进行 curl_init() 的初始化操作。接着,利用 curl_setopt() 来设定相关的选项信息,其中包含要提交的 url 地址、要保存的 cookie 文件、post 的数据(像用户名和密码等这类信息)以及是否返回信息等。之后,通过 curl_exec 来执行 curl 操作。最后,使用 curl_close() 来释放资源。PHP 自带的 http_build_query()能够把数组转化为相互连接的字符串。
接下来如果登录成功后,我们要获取登录成功后的页面信息。
//登录成功后获取数据
获取内容的函数需要传入两个参数,一个是网址 $url,另一个是 Cookie $cookie。
$ch = curl_init();
设置 curl 的选项,将 $ch 的 CURLOPT_URL 选项设置为 $url 。
设置 curl 选项,将 $ch 的 CURLOPT_HEADER 选项设置为 0 。
设置 curl 的选项,将 $ch 的 CURLOPT_RETURNTRANSFER 选项设置为 1 。
curl_setopt 函数将 $ch 的 CURLOPT_COOKIEFILE 选项设置为 $cookie ,其作用是读取 cookie 。
使用 curl_exec 函数执行 $ch ,从而抓取页面内容,结果存储在 $rs 中。
curl_close($ch);
return $rs;
}
在函数 get_content() 中,首先进行 curl 的初始化。接着设置相关选项,包括将 CURLOPT_RETURNTRANSFER 设置为 1 以实现自动返回信息,同时设置 CURLOPT_COOKIEFILE 以便读取登录时保存的 cookie 信息。最后执行 curl 并释放资源,将页面内容返回。
我们的最终目的是获取模拟登录后的信息,这种信息只有在正常登录成功后才能得到。接下来以登录开源中国的移动版为例,来看如何抓取到登录成功后的信息。
//设置post的数据
$post = array (
“email”被替换为“oschina 账户”。
“pwd”被替换为“oschina 密码”。
'goto_page' 对应的是 '/my' 。
'error_page' 对应的是 '/login' 。
'save_login' 的值为 '1' 。
现在可以进行登录操作。
);
//登录地址
$url 的值为 "http://m.oschina.net/action/user/login" 。
//设置cookie保存路径
$cookie 等于 dirname(__FILE__) 与 '/cookie_oschina.txt' 拼接后的结果;$cookie 为 dirname(__FILE__) 加上 '/cookie_oschina.txt' ;$cookie 是将 dirname(__FILE__) 和 '/cookie_oschina.txt' 进行组合得到的。
//登录后要获取信息的地址
$url2 的值为 "http://m.oschina.net/my"。
//模拟登录
执行登录操作,传入 URL $url、Cookie $cookie 和提交数据 $post 。
//获取登录页的信息
获取内容的操作是通过 get_content 函数来实现的,并且传入了两个参数,分别是 $url2 和 $cookie 。
//删除cookie文件
@ unlink($cookie);
//匹配页面信息
$preg = "/(.*)<\/td>/i";
使用 preg_match_all 函数,传入参数 $preg 和 $content,将匹配结果存储在 $arr 中。
$str = $arr[1][0];
//输出内容
echo $str;
七、封装CURL
为了便于日后调用,我们可以把这些操作封装起来。
1.模拟get或post请求
/**
curl 进行模拟请求,其中一个参数用于 get 请求,两个参数用于 post 请求。
*
上传的文件$post 包含一个键值对,其中键为'logo',值为'@D:\wamp\wamp\www\czbk\php&mysql\1.png'。
logo 是 $_FILES 的 name,其后的是图片路径,用@表示这是一个文件而非字符串。
*
参数 $url 所代表的是模拟请求的 url 。
$post 是在进行 post 请求时需要提交的数据。
参数 boolean 类型的 $header 表示是否要将响应头输出。
返回的是一个字符串类型的 $str ,这就是响应结果。
*/
如果给定了 $url$ 以及可选的 $post$ 数组(默认为空数组)和 $header$(默认为 false),那么就执行函数 curl 。
if(!$url) return;
//设置资源句柄
$curl=curl_init();
curl 对 $curl 进行设置选项操作,将 CURLOPT_URL 选项设置为 $url ;
//如果传$post,则说明是post请求
如果存在 $post ,并且 $post 是一个数组,同时数组的元素个数大于 0 。
设置 curl 的选项,将 CURLOPT_POST 选项的值设置为 1 。
设置 curl 的选项 CURLOPT_POSTFIELDS 的值为 $post ,其对应的 curl 句柄为 $curl 。
curl_setopt 函数将 $curl 的 CURLOPT_SSL_VERIFYPEER 选项设置为 false,这样就不会进行证书验证。
curl_setopt 这个函数将 $curl 作为参数,其中 CURLOPT_SSL_VERIFYHOST 这个选项被设置为 false,目的是不进行证书验证。
}
请求执行时,不会直接将响应数据输出,而是以返回值的形式来输出响应数据。
设置 curl 的选项,将 CURLOPT_RETURNTRANSFER 选项的值设置为 true ,通过 curl_setopt 函数来实现,传入的参数为 $curl 和 CURLOPT_RETURNTRANSFER 以及 true 。
//决定要不要将响应头输出
设置 curl 的选项,将 CURLOPT_HEADER 选项的值设置为 $header ,具体是对 $curl 进行设置。
$str=curl_exec($curl);
忽略转换时的错误,若没有 ignore 参数,那么该字符后面的所有字符串都无法被保存。
使用 iconv 函数将字符串 $str 从 UTF-8 编码转换为 GBK 编码,在转换过程中忽略无法转换的字符。
curl_close($curl);
return $str;
}
2.模拟登陆
/**
* curl_login() curl模拟登陆
*
参数为字符串类型的 $logUrl,它表示登陆地址的 url
参数 string $desUrl 为要访问页面的 url 。
$post 是要提交的数据。
参数 string $cookie 等于空字符串,它是存储 cookie 的文件路径。
* @return string $str 返回响应结果
*/
定义一个函数 curl_login,它接收四个参数,分别是 $logUrl、$desUrl、$post 和 $cookie(默认为空字符串)。
/********模拟登陆**********/
//初始化curl模块
$curl = curl_init();
//登录提交的地址
设置 curl 的选项,将 CURLOPT_URL 选项设置为 $logUrl ,使用的是 $curl 。
//是否显示头信息
设置 curl 的选项,将 CURLOPT_HEADER 选项的值设置为 0 。
//是否自动显示返回的信息
curl 对 $curl 进行设置选项操作,将 CURLOPT_RETURNTRANSFER 这个选项设置为 0 。
//设置Cookie信息保存在指定的文件中
如果没有$cookie,那么$cookie 等于 dirname(__FILE__) 加上 '/cookie.txt'。
if(!file_exists($cookie))}{
打开名为 $cookie 的文件,以写入模式('w')打开,将文件指针赋值给 $fp;关闭之前打开的文件指针 $fp。
}
使用 curl_setopt 函数设置 $curl 的选项 CURLOPT_COOKIEJAR 为 $cookie 。
//post方式提交
设置 curl 的选项,将 CURLOPT_POST 选项的值设置为 1 ,通过 $curl 进行设置。
提交信息时,http_build_query()能够把数组转化为相互连接的字符串。
使用 curl_setopt 函数,将 $curl 作为参数传入,设置 CURLOPT_POSTFIELDS 选项,其值为通过 http_build_query 函数对 $post 进行处理后得到的结果。
//执行cURL并关闭cURL资源,并且释放系统资源
curl_exec($curl);
curl_close($curl);
/********登陆后获取数据**********/
$ch = curl_init();
设置 curl 的选项,将选项中的 URL 设置为指定的 $desUrl,具体是将 $ch 的 CURLOPT_URL 选项设置为 $desUrl 。
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
//读取cookie
使用 curl_setopt 函数设置 $ch 的选项,将 CURLOPT_COOKIEFILE 选项设置为 $cookie 。
$rs = curl_exec($ch); //执行cURL抓取页面内容
curl_close($ch);
return $rs;
}
可以将 curl 的操作封装为一个名为 Curl.class.php 的类。
* @version 1.1
* usage:
* 1.设置选项
* $options=array(
'isReturn'为 true ,这意味着将响应结果返回。若不想获取源码而是想渲染页面,需将其设置为 false 。
“isHeader”的值为 true,其作用是将响应头返回。
* );
* $curl=new Curl($options);
* 2.模拟一般的get请求
* $curl=new Curl();
2. 它的值为 "https://www.baidu.com" 。
使用 var_dump 函数来输出 $curl 对象通过 curl_get 方法获取到的 $url 的相关信息。
* 3.模拟需要盗链的get请求(查询四六级为例)
* $curl=new Curl();
$url 的值为 'http://www.chsi.com.cn/cet/query'。
$referer 的值为 "http://www.chsi.com.cn/cet"。
$data 包含两个元素,一个元素的键为 'xm',值为 '钟林生';另一个元素的键为 'zkzh',值为 '360021161218718'。
$respn$等于$curl$调用$curl_get_chain$函数并传入$url$、$data$、$referer$作为参数;$curl$使用$curl_get_chain$函数来获取链信息;$curl$通过$curl_get_chain$函数获取与$url$、$data$、$referer$相关的链;$curl$借助$curl_get_chain$函数获取关于$url$、$data$、$referer$的链;$curl$利用$curl_get_chain$函数获取与$url$、$data$、$referer$对应的链。
* var_dump($respn);
* 4.模拟post请求(查询四六级为例)
* $data=array(
“name”被替换为“王勇平”。
江西有丰富的自然资源,如矿产资源、森林资源等。江西的矿产资源种类繁多,储量丰富,在全国占有重要地位。江西的森林资源也很丰富,森林覆盖率高,为生态环境的保护做出了重要贡献。江西还有独特的人文景观,如庐山、井冈山等,这些景观吸引了众多游客前来观光旅游。江西的历史文化悠久,有着深厚的文化底蕴,是中国文化的重要组成部分。江西的美食文化也很有特色,如南昌炒粉、瓦罐汤等,深受人们的喜爱。
江西师范大学的校园环境优美,教学设施完善,师资力量雄厚。学校拥有一支高素质的教师队伍,他们教学经验丰富,科研水平较高。学校注重学生的全面发展,为学生提供了丰富的课外活动和实践机会。学校的图书馆藏书丰富,为学生的学习提供了良好的条件。学校的食堂饭菜种类多样,味道可口,价格合理。学校的宿舍环境舒适,设施齐全,为学生的生活提供了保障。
“type”被替换为“1”。
* );
$url 的值为 'http://cet.zy62.com/query/2' 。
* $curl=new Curl();
然后使用 var_dump 函数对其结果进行输出。
*/
class Curl{
/**
* curl资源句柄
* @var resource
*/
private $curl;
/*curl选项*/
此变量 $isReturn 用于表示是否将响应结果进行返回。
此为私有属性 $isHeader,其作用是用于判断是否将响应头返回。
private $timeout; //超时时间
private $userAgent; //客户端代理
此句用于设置是否终止 cURL 从服务端进行验证,其中的 private $verifyPeer 表示一个私有属性,用于控制该验证行为。
检查服务器 SSL 证书中是否存在一个公用名的是 private $verifyHost;
/**
* 构造方法,用于实例化一个curl对象
*/
这个函数名为 __construct,它有一个参数 $options,该参数的默认值是一个空数组 array()。
/*初始化资源句柄*/
$this->curl=curl_init();
/*初始化curl选项*/
判断是否存在名为“isReturn”的选项,若存在则将其值赋给$this->isReturn,若不存在则将“ture”赋给$this->isReturn,即$this->isReturn等于存在的“isReturn”选项的值或者为“ture”。
如果在 $options 数组中存在键名为 'isHeader' 的元素,那么将 $this->isHeader 赋值为该元素的值;否则,将 $this->isHeader 赋值为 false 。
如果在 $options 中设置了 'timeout',那么就将 $this->timeout 赋值为 $options['timeout'],否则将 $this->timeout 赋值为 30。
如果设置了 $options['userAgent'],则 $this->userAgent 等于 $options['userAgent'];否则,$this->userAgent 等于 $options['timeout']。
如果存在 $_SERVER['HTTP_USER_AGENT'],则返回 $_SERVER['HTTP_USER_AGENT'],否则返回空值。
Mozilla 的版本是 5.0,系统为 Windows NT 6.1 且是 64 位(WOW64),浏览器的渲染引擎是 Gecko,发布时间是 2010 年 1 月 1 日,浏览器名称是 Firefox 且版本为 38.0,还安装了 FirePHP 且版本为 0.7.4
如果在 $options 数组中存在 'verifyPeer' 这个键,那么 $this->verifyPeer 的值就为 $options['verifyPeer'],否则 $this->verifyPeer 的值为 false。
如果在 $options 数组中存在 'verifyHost' 这个键,那么 $this->verifyHost 的值就为 $options['verifyHost'];如果不存在,那么 $this->verifyHost 的值为 2。
}
/**
* 设置curl选项
参数为字符串类型的 $url,这是请求的 url 地址。
参数 $ssl 是一个布尔值,用于表示是否以 https 协议进行传输。
* @return void
*/
这个私有函数用于设置选项,其中包含两个参数,一个是 $url,另一个是 $ssl。
/*设置curl选项*/
curl_setopt 这个函数将指定的选项设置到给定的 cURL 句柄中。这里设置的选项是 CURLOPT_URL,其值为 $url,也就是要请求的 URL 地址。
curl_setopt 这个函数用于设置 cURL 传输的选项。在当前的代码中,它将设置当前的 cURL 句柄($this->curl)的一个选项,即 CURLOPT_USERAGENT。这个选项的值被设置为 $this->userAgent,而 $this->userAgent 表示请求代理信息。
使用 curl_setopt 函数设置当前的 cURL 句柄的超时时间,将超时时间设置为$this->timeout ,这里的 cURL 句柄是$this->curl 。
/*SSL相关*/
if ($ssl) {
curl_setopt 这个函数用于设置 cURL 选项。其中,$this->curl 是要设置选项的 cURL 句柄。CURLOPT_SSL_VERIFYPEER 是一个特定的 cURL 选项,用于控制是否验证对等方(服务器)的 SSL 证书。将这个选项设置为 $this->verifyPeer 意味着禁用对服务器 SSL 证书的验证。当禁用此验证后,cURL 将终止从服务端进行验证的过程。
curl 设置该请求的选项 CURLOPT_SSL_VERIFYHOST 为 $this->verifyHost。这一操作的目的是检查服务器 SSL 证书中是否存在一个公用名(common name)。
}
/*响应结果*/
curl_setopt 这个函数用于设置 cURL 选项。其中,$this->curl 是要设置选项的 cURL 句柄。CURLOPT_HEADER 是 cURL 的一个选项,用于指定是否返回响应头。$this->isHeader 是一个布尔值,表示是否要返回响应头。如果 $this->isHeader 为 true,则返回响应头;如果为 false,则不返回响应头。所以,curl_setopt($this->curl, CURLOPT_HEADER, $this->isHeader) 这个语句的作用就是设置 cURL 句柄 $this->curl 的选项 CURLOPT_HEADER 为 $this->isHeader 的值,从而决定是否返回响应头。
curl_setopt 函数将 this->curl 这个参数的 CURLOPT_RETURNTRANSFER 选项设置为 this->isReturn ;这是用于设置 curl_exec()是否返回响应结果的操作
}
/**
* 执行curl请求
* @return string 返回响应内容
*/
private function exec(){
/*发出请求*/
使用 curl_exec 函数执行了这个 $this->curl 的操作,得到了 $response 的结果。
if (false === $response) {
echo '
获取当前的 CURL 错误信息,即 $this->curl 的错误信息,该错误信息为 ''
';
return false;
}
curl_close($this->curl);
return $response;
}
/**
* curl模拟post请求,返回响应的内容
参数为字符串类型的 $url,这是请求的 url 。
参数为数组类型的 $data ,这是要发送的数据。
参数 boolean 类型的 $ssl ,用于表示是否以 https 协议进行传输,其默认值为 true 。
返回的内容是字符串类型的 $response ,这就是返回的响应内容。
*/
这个函数名为`curl_post`,它有三个参数,分别是`$url`、`$data`和`$ssl`,其中`$ssl`默认为`true`。它的作用是进行`curl`请求并以`POST`方式发送数据。如果`$ssl`为`true`,则会使用`https`协议;如果为`false`,则使用`http`协议。通过这个函数可以向指定的`$url`发送`$data`数据。
/*设置选项*/
$this->setOption($url,$ssl);
/*处理post相关选项*/
curl_setopt 这个函数将 $this->curl 作为参数,将 CURLOPT_POST 这个常量设置为 true ;这是用于判断是否为 POST 请求的操作 。
curl_setopt 这个函数将 $this->curl 作为参数传入,同时将 CURLOPT_POSTFIELDS 这个常量设置为 $data,以此来设置 post 的内容。
/*执行curl请求*/
if($this->isReturn){
return $this->exec();
}
$this->exec();
}
/**
* curl模拟一般的get请求,返回响应的内容
参数为字符串类型的 $url ,它表示请求的 url ,并且这个 url 可以带有查询参数。
* @param boolean $ssl 是否以https协议传输,默认为true
* @return string $response 返回响应的内容
*/
这个函数名为`curl_get`,它有两个参数,一个是`$url`,另一个是`$ssl`,默认值为`true`。它的作用是通过`curl`库来获取指定`url`的内容。如果`$ssl`为`true`,则会使用`https`协议进行请求;如果`$ssl`为`false`,则会使用`http`协议进行请求。在函数内部,会初始化`curl`会话,设置请求的`url`、请求方法、超时时间等参数,然后执行`curl`请求,获取响应内容,最后关闭`curl`会话并返回响应内容。
/*设置选项*/
$this->setOption($url,$ssl);
/*执行curl请求*/
if($this->isReturn){
return $this->exec();
}
$this->exec();
}
/**
* curl模拟需要盗链的get请求,返回响应的内容
* @param string $url 请求的url
@param 数组 $data ,这是查询参数,以数组形式存在,在方法内部会自动被转换为字符串形式。
参数为字符串类型的 $referer ,它表示盗链的 url 。
* @param boolean $ssl 是否以https协议传输,默认为true
* @return string $response 返回响应的内容
*/
这个函数名为`curl_get_chain`。它有四个参数,分别是`$url`、`$data`、`$referer`和`$ssl`,其中`$ssl`默认为`true`。它的作用是通过`curl`方式获取相关的链信息。
/*设置选项*/
$this->setOption($url,$ssl);
$param='';
foreach ($data as $k => $v) {
$param 加上 urlencode($k) 再加上 "=" 加上 urlencode($v) 再加上 "&" ;
}
/*设置查询参数*/
设置此 cURL 句柄的 CURLOPT_POST 选项为 0 ,即不使用 POST 方式发送请求。
设置此 cURL 对象的选项 CURLOPT_POSTFIELDS 的值为 $param ,具体是对 $this->curl 这个 cURL 对象进行设置
/*设置referer盗链*/
使用 curl_setopt 函数设置当前的 curl 选项。将 this->curl 作为第一个参数传入函数。将 CURLOPT_REFERER 作为第二个参数传入函数。将 $referer 作为第三个参数传入函数。
/*执行curl请求*/
if($this->isReturn){
return $this->exec();
}
$this->exec();
}
}
你可能想看: