0、参考资料

http://php.net/manual/zh/function.curl-setopt.php
http://www.blogfshare.com/php-curl-get-post.html

1、什么是CURL

cURL 是一个利用URL语法规定来传输文件和数据的工具,支持很多协议,如HTTP、FTP、TELNET等。最爽的是,PHP也支持 cURL 库。使用PHP的cURL库可以简单和有效地去抓网页。你只需要运行一个脚本,然后分析一下你所抓取的网页,然后就可以以程序的方式得到你想要的数据了。无论是你想从从一个链接上取部分数据,或是取一个XML文件并把其导入数据库,那怕就是简单的获取网页内容,cURL 是一个功能强大的PHP库。

2、基本步骤

step-1:初始化

$ch = curl_init()

step-2:设置属性

curl_setopt()

有一长串cURL参数可供设置,它们能指定URL请求的各个细节。

step-3:执行并获取结果

$output = curl_exec($ch);

step-4:释放句柄

curl_close($ch);

3、核心函数

cURL函数有很多,详情的可以参考官方文档。
下面列举出必用或者常用的函数。
curl_init: 初始化一个curl会话,curl_init()函数唯一的一个参数是可选的,表示一个url地址。

$ch = curl_init();
// or 
$ch = curl_init($url);

curl_setopt:为一个curl设置会话参数。

curl_exec($ch):执行一个curl会话,唯一的参数是curl_init()函数返回的句柄。

curl_close($ch):作用是关闭一个curl会话,唯一的参数是curl_init()函数返回的句柄。

curl_error($ch):返回当前会话最后一次错误的字符串。

4、常见重要配置

CURLOPT_HTTPHEADER: 设置 HTTP 头字段的数组。格式: array('Content-type: text/plain', 'Content-length: 100')。这里需要注意格式,是一维数组,不是关联数组。

$headers = array("AuthToken:{$token}","Content-Type:application/x-www-form-urlencoded");
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

CURLOPT_RETURNTRANSFER:TRUE 将curl_exec()获取的信息以字符串返回,而不是直接输出。

CURLOPT_URL: 需要获取的 URL 地址,也可以在curl_init() 初始化会话的时候。

CURLOPT_POST: TRUE 时会发送 POST 请求,类型为
application/x-www-form-urlencoded,是 HTML 表单提交时最常见的一种。

CURLOPT_POSTFIELDS: 发送全部数据使用HTTP协议中的POST操作来发送。参数一般需要用http_build_query包装。

CURLOPT_TIMEOUT: 容许CURL函数执行的最长秒数。

CURLOPT_NOBODY: TRUE时将不输出BODY内容,这对判断远程文件是否存在,而不需要读取内容场景比较有用。

两种配置方式:
① 按照数组格式进行设置

$options = array(
CURLOPT_RETURNTRANSFER =>true,
     CURLOPT_HEADER =>false,
     CURLOPT_POST =>true,
     CURLOPT_POSTFIELDS => $post_data,
     CURLOPT_TIMEOUT => $timeout,
);
$ch = curl_init($url);
curl_setopt_array($ch, $options);

② 单个属性进行设置

$options = array(
CURLOPT_RETURNTRANSFER =>true,
     CURLOPT_HEADER =>false,
     CURLOPT_POST =>true,
     CURLOPT_POSTFIELDS => $post_data,
     CURLOPT_TIMEOUT => $timeout,
);
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_ HEADER, false);
curl_setopt($ch, CURLOPT_ POST, true);
curl_setopt($ch, CURLOPT_ POSTFIELDS, $post);
curl_setopt($ch, CURLOPT_ TIMEOUT, $ timeout);

5、常见demo示例

demo-1:

    private function doCurlGet($url)
    {
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_POST, false);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
        curl_setopt($ch, CURLOPT_TIMEOUT, 5);
        $result = curl_exec($ch);
        curl_close($ch);
        return $result;
    }

demo-2:

function doHttpSend($url, $keysArr, $header = array()) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_HTTPHEADER, $header );
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
    curl_setopt($ch, CURLOPT_TIMEOUT, 10);
    if ($keysArr){//如果不是POST 会报参数错误
        curl_setopt($ch, CURLOPT_POST, TRUE);
        curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($keysArr));
    }
    curl_setopt($ch, CURLOPT_URL, $url);

    $ret = curl_exec($ch);
    if($ret === false){
        var_dump(curl_error($ch));exit;
    }

    $error = curl_error($ch);
    curl_close($ch);
    return $error ? $error : $ret;
}

6、curl与PHP-CLI

相关链接:https://www.zybuluo.com/a5635268/note/180515

部分demo示例如下:

① 抓取页面内容到一个文件中:

curl -o jasper.html jasper.pdmp.qq.com
# 或者
curl jasper.pdmp.qq.com > tojasper.html

② 抓具体的文件,用-O(大写的),后面的url要具体到某个文件,不然抓不下来。我们还可以用正则来抓取东西,但文件名还是得具体。

curl -O http://jasper.pdmp.qq.com/pdmp/friso/images/app/logo.png

③ 查看响应头信息。

curl -I jasper.pdmp.qq.com

④ 带参数请求。

curl -d user_id=10 http://jasper.pdmp.qq.com/pdmp/user/role

⑤ 带头部信息请求。

curl  -H  "Content-Type:application/x-www-form-urlencoded" -d  user_id=10 http://jasper.pdmp.qq.com/pdmp/user/role

⑥ 当我们经常用curl去搞人家东西的时候,人家会把你的IP给屏蔽掉的,这个时候,我们可以用代理

curl  -x  24.10.28.84:32779  -o  home.html  http://www.codesky.net

⑦ 通过ftp下载远程文件

curl -O http://jasper.pdmp.qq.com/pdmp/friso/styles/common.css
curl -u 用户名:密码 
-O http://www.codesky.net/demo/curtain/bbstudy_files/style.css
优质内容筛选与推荐>>
1、@echo off 与echo off
2、Html表单的正则校验--将不符合指定正则表达式的字符串自动替换为空
3、matlab绘图函数
4、2016.10.10
5、1124 两个有序数组合并


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号