php抓取网页连接函数(PHP建立CURL请求的基本步骤和数据的工具)

优采云 发布时间: 2022-04-11 00:32

  php抓取网页连接函数(PHP建立CURL请求的基本步骤和数据的工具)

  CURL 是一个使用 URL 语法传输文件和数据的工具,并且支持多种协议,例如 HTTP、FTP、TELNET 等。最重要的是,PHP 还支持 CURL 库。使用 PHP 的 CURL 库可以轻松高效地抓取网页。你只需要运行一个脚本,然后分析你爬取的网页,然后你就可以通过编程方式获取你想要的数据。无论您是想从链接中获取一些数据,还是获取 XML 文件并将其导入数据库,甚至只是获取网页的内容,CURL 都是一个强大的 PHP 库。

  PHP中建立CURL请求的基本步骤

  ①:初始化

  curl_init()

  ②:设置属性

  curl_setopt()。可以设置的 CURL 参数有一长串,可以指定 URL 请求的各种细节。

  ③:执行并得到结果

  curl_exec()

  ④:松开手柄

  curl_close()

  CURL 实现 GET 和 POST

  ①:GET方法实现

  //初始化

$curl = curl_init();

//设置抓取的url

curl_setopt($curl, CURLOPT_URL, 'http://www.baidu.com');

//设置头文件的信息作为数据流输出

curl_setopt($curl, CURLOPT_HEADER, 1);

//设置获取的信息以文件流的形式返回,而不是直接输出。

curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);

//执行命令

$data = curl_exec($curl);

//关闭URL请求

curl_close($curl);

//显示获得的数据

print_r($data);

  ②:POST方法实现

    //初始化

$curl = curl_init();

//设置抓取的url

curl_setopt($curl, CURLOPT_URL, 'http://www.baidu.com');

//设置头文件的信息作为数据流输出

curl_setopt($curl, CURLOPT_HEADER, 1);

//设置获取的信息以文件流的形式返回,而不是直接输出。

curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);

//设置post方式提交

curl_setopt($curl, CURLOPT_POST, 1);

//设置post数据

$post_data = array(

"username" => "coder",

"password" => "12345"

);

curl_setopt($curl, CURLOPT_POSTFIELDS, $post_data);

//执行命令

$data = curl_exec($curl);

//关闭URL请求

curl_close($curl);

//显示获得的数据

print_r($data);

  ③:如果获取到的数据是json格式,使用json_decode函数将其解释为数组。

  $output_array = json_decode($data,true); //如果第二个参数为true,则转换为数组的形式。如果不填充,它将是一个对象的形式

  如果你使用 json_decode($data) 来解析,你会得到对象类型的数据。

  封装函数

  /**

* @param $url 访问的URL

* @param string $post post数据(不填则为GET),数据支持数组,不支持json_encode处理后的json格式

* @param string $cookie 提交的$cookies

* @param int $returnCookie 是否返回$cookies

* @return mixed|string

*/

function curl_request($url, $post = '', $cookie = '', $returnCookie = 0)

{

$curl = curl_init();

curl_setopt($curl, CURLOPT_URL, $url); //发送的地址

curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0)');

curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); //启用时会将服务器服务器返回的"Location: "放在header中递归的返回给

curl_setopt($curl, CURLOPT_AUTOREFERER, 1); //重定向时,自动设置header中的Referer:信息

//curl_setopt($curl, CURLOPT_REFERER, "http://XXX"); //构造来路

if ($post) {

curl_setopt($curl, CURLOPT_POST, 1);

curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($post));

}

if ($cookie) {

curl_setopt($curl, CURLOPT_COOKIE, $cookie);

}

curl_setopt($curl, CURLOPT_HEADER, $returnCookie);

curl_setopt($curl, CURLOPT_TIMEOUT, 10); //超时时间为10秒

curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); //要求结果为字符串串且输出到屏幕

$data = curl_exec($curl);

if (curl_errno($curl)) {

return curl_error($curl);

}

curl_close($curl);

if ($returnCookie) {

list($header, $body) = explode("\r\n\r\n", $data, 2);

preg_match_all("/Set\-Cookie:([^;]*);/", $header, $matches);

$info['cookie'] = substr($matches[1][0], 1);

$info['content'] = $body;

return $info;

} else {

return $data;

}

}

  建豪发送的函数:

  /**

* CURL请求

* @param $url 请求url地址

* @param $method 请求方法 get post

* @param null $postfields post数据数组

* @param array $headers 请求header信息

* @param bool|false $debug 调试开启 默认false

* @return mixed

*/

function httpRequest($url, $method = "GET", $postfields = null, $headers = array(), $debug = false)

{

$method = strtoupper($method);

$ci = curl_init();

/* Curl settings */

curl_setopt($ci, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);

curl_setopt($ci, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.2; WOW64; rv:34.0) Gecko/20100101 Firefox/34.0");

curl_setopt($ci, CURLOPT_CONNECTTIMEOUT, 60); /* 在发起连接前等待的时间,如果设置为0,则无限等待 */

curl_setopt($ci, CURLOPT_TIMEOUT, 7); /* 设置cURL允许执行的最长秒数 */

curl_setopt($ci, CURLOPT_RETURNTRANSFER, true);

switch ($method) {

case "POST":

curl_setopt($ci, CURLOPT_POST, true);

if (!empty($postfields)) {

$tmpdatastr = is_array($postfields) ? http_build_query($postfields) : $postfields;

curl_setopt($ci, CURLOPT_POSTFIELDS, $tmpdatastr);

}

break;

default:

curl_setopt($ci, CURLOPT_CUSTOMREQUEST, $method); /* //设置请求方式 */

break;

}

$ssl = preg_match('/^https:\/\//i', $url) ? TRUE : FALSE;

curl_setopt($ci, CURLOPT_URL, $url);

if ($ssl) {

curl_setopt($ci, CURLOPT_SSL_VERIFYPEER, FALSE); // https请求 不验证证书和hosts

curl_setopt($ci, CURLOPT_SSL_VERIFYHOST, FALSE); // 不从证书中检查SSL加密算法是否存在

}

//curl_setopt($ci, CURLOPT_HEADER, true); /*启用时会将头文件的信息作为数据流输出*/

curl_setopt($ci, CURLOPT_FOLLOWLOCATION, 1);

curl_setopt($ci, CURLOPT_MAXREDIRS, 2);/*指定最多的HTTP重定向的数量,这个选项是和CURLOPT_FOLLOWLOCATION一起使用的*/

curl_setopt($ci, CURLOPT_HTTPHEADER, $headers);

curl_setopt($ci, CURLINFO_HEADER_OUT, true);

/*curl_setopt($ci, CURLOPT_COOKIE, $Cookiestr); * *COOKIE带过去** */

$response = curl_exec($ci);

$requestinfo = curl_getinfo($ci);

$http_code = curl_getinfo($ci, CURLINFO_HTTP_CODE);

if ($debug) {

echo "=====post data======\r\n";

var_dump($postfields);

echo "=====info===== \r\n";

print_r($requestinfo);

echo "=====response=====\r\n";

print_r($response);

}

curl_close($ci);

return $response;

//return array($http_code, $response,$requestinfo);

}

  转载于:

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线