掌握CURL:使用PHP扩展发送HTTP请求的完整指南

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

掌握CURL:使用PHP扩展发送HTTP请求的完整指南

使用 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(); } }

你可能想看:
« 上一篇
下一篇 »

相关推荐

php实时推送,php实地培训

2026年10月05日

53阅读

php乱码出现问号的原因,php乱码出现问号的原因有哪些

2026年10月05日

44阅读

php一句话木马,一句话木马ctf

2026年10月05日

48阅读

php获取数组长度,php中如何获取数组的长度

2026年10月05日

50阅读

php面试题库及答案,php程序员面试真题库

2026年10月05日

47阅读

phpcontent-type修改,php源码二次修改需要多少钱

2026年10月05日

42阅读