12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
ADADADADAD
网络知识 时间:2024-11-25 14:58:38
作者:文/会员上传
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
php中的curl函数在网络编程中是非常常用的,无论是发起http请求,还是上传文件,都可以使用curl来完成。但是就像每一个工具都有自己的坑,curl也有自己的坑,如果不注意这些问题,就会
以下为本文的正文内容,内容仅供参考!本站为公益性网站,复制本文以及下载DOC文档全部免费。
php中的curl函数在网络编程中是非常常用的,无论是发起http请求,还是上传文件,都可以使用curl来完成。但是就像每一个工具都有自己的坑,curl也有自己的坑,如果不注意这些问题,就会踩进坑里面。
第一个坑就是返回的数据有可能是gzip压缩的数据,这个时候需要使用gzdecode函数将返回的数据解压,否则会出现乱码的现象。例如,下面的代码展示了如何解压gzip数据:
$ch = curl_init();curl_setopt($ch, CURLOPT_URL, "http://www.test.com");curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);curl_setopt($ch, CURLOPT_ENCODING, "gzip");$result = curl_exec($ch);if (curl_errno($ch)) {echo 'Error: ' . curl_error($ch);}curl_close($ch);//解压gzip数据$result = gzdecode($result);
第二个坑是curl请求返回的数据可能包含BOM字节,如果不去掉BOM字节,就会出现乱码的情况。例如:
$ch = curl_init();curl_setopt($ch, CURLOPT_URL, "http://www.test.com");curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);$result = curl_exec($ch);if (curl_errno($ch)) {echo 'Error: ' . curl_error($ch);}curl_close($ch);//去掉BOM字节$result = strstr($result, "utf-8");
第三个坑是有些抓取网站可能需要携带一些特殊的header信息,例如浏览器信息,这个时候可以通过设置CURLOPT_HTTPHEADER来完成。例如:
$ch = curl_init();curl_setopt($ch, CURLOPT_URL, "http://www.test.com");curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);curl_setopt($ch, CURLOPT_HTTPHEADER, [ 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36']);$result = curl_exec($ch);if (curl_errno($ch)) {echo 'Error: ' . curl_error($ch);}curl_close($ch);
第四个坑是curl返回的Cookie信息可能不是json格式的,而php json_decode函数只能解析json格式的数据,所以需要将返回的cookie信息转化为json格式的数据。例如:
$ch = curl_init();curl_setopt($ch, CURLOPT_URL, "http://www.test.com");curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt');$result = curl_exec($ch);if (curl_errno($ch)) {echo 'Error: ' . curl_error($ch);}curl_close($ch);//将cookie转化为json格式$cookie = file_get_contents('cookie.txt');preg_match_all('/Set\-Cookie:\s([^;]*)/i', $cookie, $matches);$cookies = [];foreach ($matches[1] as $value) {parse_str($value, $item);$cookies = array_merge($cookies, $item);}$cookie = json_encode($cookies);
以上就是使用curl函数时可能遇到的坑,如果大家还有其他的问题,可以在评论区留言,我会尽快回复。
11-20
11-19
11-20
11-20
11-20
11-19
11-20
11-20
11-19
11-20
11-19
11-19
11-19
11-19
11-19
11-19