文档章节

PHP扩展之CURL

独孤蝈蝈
 独孤蝈蝈
发布于 2016/10/20 15:42
字数 1180
阅读 14
收藏 2
PHP

先来看看CURL相关的函数,如下: 

<?php
    resource curl_init([string $url=null]);             //初始化一个新的会话,返回一个curl句柄 url指定目标url
    bool     curl_setopt(resource $r, int $option, mixed $value); //为curl会话句柄设置一个选项
    bool     curl_setopt_array(resource $r, array $options);      //用数组为curl会话句柄批量设置选项
    mixed    curl_exec(resource $r); //执行给定的curl会话 成功返回true 如果选项CURLOPT_RETURNTRANSFER被设置则返回结果
    mixed    curl_getinfo(resource $r, [int $opt = 0]); //返回会话最后一次传输信息 opt指定获取的选项值
    string   curl_error(resource $r);                   //返回最近一条curl会话错误信息
    void     curl_close(resource $r);                   //关闭一个curl会话

    resource curl_multi_init(void);                     //返回一个curl批处理句柄
    bool     curl_multi_setopt(res $mh, int $option, mixed $value);  //为curl批处理设置一个选项
    int      curl_multi_add_handle(res $mh, res $r);    //向curl批处理句柄mh中添加单独的句柄r
    int      curl_multi_exec(res $mh, int &$still_runnint); //处理所有的curl句柄 still_runnint判断是否仍在执行
    int      curl_multi_remove_handle(res $mh, res $r); //向curl批处理句柄mh中移除单独的句柄r
    void     curl_multi_close(res $mh);                 //关闭一个curl批处理句柄
    //常用选项
    CURLOPT_URL     =>  string      //用来设置url
    CURLOPT_PORT    =>  int         //设置连接的端口
    CURLOPT_HEADER  =>  bool        //true表示将头文件信息作为数据流输出
    CURLOPT_RETURNTRANSFER=>bool    //true表示将curl_exec()获取的信息以字符串返回,而不是直接输出
    CURLOPT_HTTPGET =>  bool        //true表示设置HTTP的method为GET 默认GET方法

    CURLOPT_POST    =>  bool        //true表示设置HTTP的method为POST 类型为application/x-www-form-urlencoded
    CURLOPT_POSTFIELDS => string    //设置post数据 可以是urlencoded后的字符串 也可以是关联数组形式则类型会被设置为multipart/form-data

    CURLOPT_HTTPAUTH => int         //设置服务器认证方法 CURLAUTH_BASIC
    CURLOPT_USERPWD =>  string      //设置连接中需要的用户名和密码,格式为:"[username]:[password]"

    CURLOPT_HTTPPROXYTUNNEL=>bool   //true表示通过指定的HTTP代理来传输
    CURLOPT_PROXY   => string       //设置代理服务器地址
    CURLOPT_PROXYUSERPWD=>string    //设置连接到代理的"[username]:[password]"格式的字符串
    CURLOPT_PROXYAUTH=> int         //设置HTTP代理连接的验证方式 仅支持CURLAUTH_BASIC和CURLAUTH_NTLM
    CURLOPT_PROXYPORT=> int         //设置代理服务器的端口
    CURLOPT_PROXYTYPE=> int         //设置代理类型 默认CURLPROXY_HTTP
    
    CURLOPT_CONNECTTIMEOUT=>int     //设置连接等待的秒数 0表示无限等待 
    CURLOPT_CONNECTTIMEOUT_MS=>int  //设置连接等待的毫秒数 0表示无限等待
    CURLOPT_TIMEOUT =>  int         //设置允许curl会话执行的最大秒数
    CURLOPT_TIMEOUT_MS=>int         //设置允许curl会话执行的最大毫秒数
    CURLOPT_MAXCONNECTS => int      //设置允许的最大连接数量

    CURLOPT_COOKIE => string        //设置HTTP请求中的COOKIE 多个COOKIE用分号分隔 分号后带一个空格
    CURLOPT_COOKIEJAR=> string      //设置连接结束后 保存cookie信息的文件
    CURLOPT_COOKIEFILE =>string     //设置读取cookie的文件名
    CURLOPT_REFERER => string       //设置HTTP请求中字段Referer的内容
    CURLOPT_USERAGENT =>string      //设置HTTP请求中字段User-Agent的内容
    
    CURLOPT_HTTPHEADER => string    //设置 HTTP 头字段的数组。格式: array('Content-type: text/plain', 'Content-length: 100') 
    CURLOPT_INFILE => resource      //设置上传文件需要读取的文件

 

一个小示例

如果一切就绪,下面是一个小例程:

<?php
    $ch = curl_init();                                      //初始化一个curl会话
    curl_setopt($ch, CURLOPT_URL, 'http://www.baidu.com');  //设置url
    curl_setopt($ch, CURLOPT_HEADER, false);                //设置不返回头信息
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);         //设置结果返回为字符串
    $data = curl_exec($ch);                                 //执行curl会话
    curl_close($ch);                                        //关闭curl请求
    var_dump($data);

 

如何POST数据

上面是抓取网页的代码,下面则是向某个网页POST数据。假设我们有一个处理表单的网址http://www.example.com/sendSMS.php,其可以接受两个表单域,一个是电话号码,一个是短信内容。

<?php
    $phoneNumber = '13912345678';
    $message = 'This message was generated by curl and php';
    $curlPost = 'pNUMBER='  . urlencode($phoneNumber) . '&MESSAGE=' . urlencode($message) . '&SUBMIT=Send';
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, 'http://www.example.com/sendSMS.php');
    curl_setopt($ch, CURLOPT_HEADER, false);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $curlPost);
    $data = curl_exec();
    curl_close($ch);


 从上面的程序我们可以看到,使用CURLOPT_POST设置HTTP协议的POST方法,而不是GET方法,然后以CURLOPT_POSTFIELDS设置POST的数据。

 

关于代理服务器

下面是一个如何使用代理服务器的示例。

<?php 
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, 'http://www.example.com');
    curl_setopt($ch, CURLOPT_HEADER, false);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, 1);
    curl_setopt($ch, CURLOPT_PROXY, 'fakeproxy.com:1080');
    curl_setopt($ch, CURLOPT_PROXYUSERPWD, 'user:password');
    $data = curl_exec();
    curl_close($ch);

 

 关于SSL和Cookie

关于SSL也就是HTTPS协议,你只需要把CURLOPT_URL连接中的http://变成https://就可以了。当然,还有一个参数叫CURLOPT_SSL_VERIFYHOST可以设置为验证站点。

关于Cookie,你需要了解下面三个参数:

CURLOPT_COOKIE,在当面的会话中设置一个cookie
CURLOPT_COOKIEJAR,当会话结束的时候保存一个Cookie
CURLOPT_COOKIEFILE,Cookie的文件。

HTTP服务器认证

最后,我们来看一看HTTP服务器认证的情况。

<?php 
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, 'http://www.example.com');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
    curl_setopt(CURLOPT_USERPWD, '[username]:[password]')
 
    $data = curl_exec();
    curl_close($ch);

 

© 著作权归作者所有

上一篇: PHP会话控制
独孤蝈蝈
粉丝 4
博文 59
码字总数 39108
作品 0
朝阳
程序员
私信 提问
不重新编译PHP的情况下独立添加扩展

服务器运行一段时间后,可能突然会需求添加某个扩展,如curl、pdo、xmlrpc等,这就需要在不重新编译PHP的情况下独立添加扩展。 下面以安装curl为例,介绍具体安装步骤。 1.安装crul wget htt...

JasonWung
2016/08/02
15
0
网站建设安装php_cURL扩展

网站建设以下方法在ubuntu下没有尝试成功,sudo apt-get install php5,找不到下文所谓php源码目录安装在哪里。 后来发现sudo apt-get install php5-curl即可安装php cURL扩展。以下文章以后...

网络营销
2012/03/01
0
0
php 添加扩展库

以php curl 扩展库编译为例。 本次编译只是单独编译php的扩展库,然后将编译好的php扩展库加到现在运行的php中,不对现在运行的php重新编译,所以对现在运行的php没有任何影响。 假如原先编译...

card123
2015/11/23
47
0
CURL操作与实践

CURL是liunx系统的一个命令行工具,目的是进行数据抓取;现在CURL已经在非常多的系统中使用,WIN用户可以使用DOS版本的CURL命令操作,操作方法很简单,就是在CMD窗口中找到CURL文件夹,执行C...

安世博
2015/04/14
533
0
您的服务器没有安装这个PHP扩展:curl ... Failed

您的服务器没有安装这个PHP扩展:curl ... Failed 在安装cms时如果出现:您的服务器没有安装这个PHP扩展:curl ... Failed 解决办法如下: 1、在php.ini中找到有extension=phpcurl.dll, 去掉前...

技术小胖子
2017/11/01
0
0

没有更多内容

加载失败,请刷新页面

加载更多

新手转行学java难吗?新手学java需要注意的6个方面!

新手转行在成都学java到底难不难,对于这个问题,我们专门做过一个调查,超过1000名已经在职的java从业者,其中有80%的程序员觉得学java不难,20%的程序员觉得前期有点难,其中对于50%自学的...

Java领航员
48分钟前
3
0
动态规划-硬币问题分析

什么是动态规划 上次对动态规划已经有了个大概的分析。引用维基百科的话就是: dynamic programming is a method for solving a complex problem by breaking it down into a collection of...

AI考拉
56分钟前
1
0
谈谈lucene的DocValues特性之SortedSetDocValuesField

SortedSetDocValuesField与SortedDocValuesField类似但它是一键多值的(注意:lucene的数据模型是支持一键多值的即key-values模型),lucene在实现时会判断是一键一值还是多值,如果单值就调...

FAT_mt
今天
1
0
生产者消费者模式

//尚学堂视频里,不是完整的 public class Movie { /** * 共同的资源 */ private String pic; //flay为true生产,false消费 private boolean flag=true; public synchronized void play(Str......

南桥北木
今天
1
0
使用阿里云镜像安装kubernetes

参考阿里云镜像 https://opsx.alibaba.com/mirror?lang=zh-CN 系统: CentOS / RHEL / Fedora cat <<EOF > /etc/yum.repos.d/kubernetes.repo[kubernetes]name=Kubernetesbaseurl=https......

北漂的我
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部