php curl 坑


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函数时可能遇到的坑,如果大家还有其他的问题,可以在评论区留言,我会尽快回复。


上一篇:php curl 加载

下一篇:php curl 发送post


php curl
Copyright © 2002-2019 测速网 https://www.inhv.cn/ 皖ICP备2023010105号 城市 地区 街道
温馨提示:部分文章图片数据来源与网络,仅供参考!版权归原作者所有,如有侵权请联系删除!
热门搜索