首页 > 编程知识 正文

php中的curl常用例子(php curlfile)

时间:2023-12-20 12:40:57 阅读:318255 作者:OUZX

本文目录一览:

curl命令在PHP中怎么用

这是我项目中一直在用的一个方法

?php

function curl($url,$params = array(),$header = array(),$timeout = 180){

    if(empty($url)) return $url;

    $curl = curl_init();

    curl_setopt($curl, CURLOPT_URL,$url);//请求url地址

    curl_setopt($curl, CURLOPT_HTTPHEADER , $header );  //构造IP

    

    if(!empty($params)  count($params)  0){

        curl_setopt($curl, CURLOPT_POST, true);

        

        //Request Payload格式数据

        if(isset($params['is_json'])  $params['is_json'] === true){

            unset($params['is_json']);

            $params = json_encode($params);

        }else{

            $params = http_build_query($params);

        }

        curl_setopt($curl, CURLOPT_POSTFIELDS, $params);        

    }

    //curl_setopt($curl, CURLOPT_HEADER, true);//是否返回响应头信息

    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);//是否将结果返回

    curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);//是否重定向

    //curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36');

    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);   // 只信任CA颁布的证书  

    //curl_setopt($curl, CURLOPT_CAINFO, $cacert); // CA根证书(用来验证的网站证书是否是CA颁布)  

    //curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 2); // 检查证书中是否设置域名,并且是否与提供的主机名匹配  

    // 从证书中检查SSL加密算法是否存在

    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);

    curl_setopt($curl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0); 

    //curl_setopt($curl, CURLOPT_HTTPHEADER, array("Expect: ")); 

    curl_setopt($curl, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4 );

    curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, $timeout);//用来告诉PHP脚本在成功连接服务器前等待多久(连接成功之后就会开始缓冲输出),这个参数是为了应对目标服务器的过载,下线,或者崩溃等可能状况;

    curl_setopt($curl, CURLOPT_TIMEOUT, $timeout);//用来告诉成功PHP脚本,从服务器接收缓冲完成前需要等待多长时间。如果目标是个巨大的文件,生成内容速度过慢或者链路速度过慢,这个参数就会很有用。

    // 自动设置Referer

    curl_setopt($curl, CURLOPT_AUTOREFERER, 1);

    //curl_setopt($curl, CURLOPT_COOKIEJAR, "D:phpStudyWWWcjcooBE66.tmp");// //写入cookie信息

    //setcookie('cookie_jar', $cookie_jar); //保存cookie路径

    $data = curl_exec($curl); //执行    

    curl_close($curl);

    return $data;

}

?

PHP中的curl_exec

curl_exec

(PHP 4 = 4.0.2, PHP 5) curl_exec — 执行一个cURL会话

可以参考官方网站范例:

你要用CURL,就跟Session一样,要先初始化 curl_init(),不然PHP部会知道该怎麼运作。初始化完成之後就要开始设定参数,就像是要不要显示出来。当你参数设定完毕,就要开始执行这个CURL。最後就要关闭这个CURL。这就算是一个简单的CURL运用,当然还有更多变化。

实际例子:

?php

// 创建一个cURL资源

$ch = curl_init();

// 设置URL和相应的选项

curl_setopt($ch, CURLOPT_URL, "

);

curl_setopt($ch, CURLOPT_HEADER, 0);

// 抓取URL并把它传递给浏览器

curl_exec($ch);

// 关闭cURL资源,并且释放系统资源

curl_close($ch);

?

如使用mysql一样,首先,我们必须先建立一个「curl」的连线,也因此,必须使用到 curl_init() 这个函式。而为了怕建立连线忘了关闭。因此,必须先写好关闭的函式,curl_close($ch)。

不过大部分HTML标签都可以抓下来,并且显示,可是有部分可能与资料加密性或是转址的部分,就无法正常显示。

/ 建立CURL连线

$ch = curl_init();

// 设定撷取的URL网址

curl_setopt($ch, CURLOPT_URL, "

);

curl_setopt($ch, CURLOPT_HEADER, false);

//将curl_exec()获取的讯息以文件流的形式返回,而不是直接输出。

curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);

// 执行

$temp=curl_exec($ch);

// 关闭CURL连线

curl_close($ch)

加上curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);之後,他会将curl_exec()获取的讯息以文件流的形式返回传给$temp,而不是直接输出。如果要显示出画面的话就加上 echo $temp;就可以了。

下面先分享一个比较常用的,传递参数的部分。

简易的使用语法(GET):

// 建立CURL连线

$ch = curl_init();

// 设定撷取的URL网址

curl_setopt($ch, CURLOPT_URL, "

);

curl_setopt($ch, CURLOPT_HEADER, false);

//将curl_exec()获取的讯息以文件流的形式返回,而不是直接输出。

curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);

// 执行

$temp=curl_exec($ch);

// 关闭CURL连线

curl_close($ch)

Get参数可以直接在网址传递例如网址後面加的?SomeVar=test,但是一旦资料量很大,用POST送还是比较适合。

简易的使用语法(POST):

// 建立CURL连线

$ch = curl_init();

// 设定撷取的URL网址

curl_setopt($ch, CURLOPT_URL, "

);

curl_setopt($ch, CURLOPT_HEADER, false);

//将curl_exec()获取的讯息以文件流的形式返回,而不是直接输出。

curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);

//设定要传的 变数A=值A  变数B=值B (中间要用符号串接)

$PostData = "a=abcb=def";

//设定CURLOPT_POST 为 1或true,表示要用POST方式传递

curl_setopt($ch, CURLOPT_POST, 1); 

//CURLOPT_POSTFIELDS 後面则是要传接的POST资料。

curl_setopt($ch, CURLOPT_POSTFIELDS, $PostData);

// 执行

$temp=curl_exec($ch);

// 关闭CURL连线

curl_close($ch)

以上的传递方式在某些状况下很好用,譬如说,没有设计完整的会员申请系统,就可以利用上面这些程式码,做一个自动注册申请机

php curl 应用有哪些

curl_close — 关闭一个curl会话

curl_copy_handle — 拷贝一个curl连接资源的所有内容和参数

curl_errno — 返回一个包含当前会话错误信息的数字编号

curl_error — 返回一个包含当前会话错误信息的字符串

curl_exec — 执行一个curl会话

curl_getinfo — 获取一个curl连接资源句柄的信息

curl_init — 初始化一个curl会话

curl_multi_add_handle — 向curl批处理会话中添加单独的curl句柄资源

curl_multi_close — 关闭一个批处理句柄资源

curl_multi_exec — 解析一个curl批处理句柄

curl_multi_getcontent — 返回获取的输出的文本流

curl_multi_info_read — 获取当前解析的curl的相关传输信息

curl_multi_init — 初始化一个curl批处理句柄资源

curl_multi_remove_handle — 移除curl批处理句柄资源中的某个句柄资源

curl_multi_select — Get all the sockets associated with the cURL extension, which can then be "selected"

curl_setopt_array — 以数组的形式为一个curl设置会话参数

curl_setopt — 为一个curl设置会话参数

curl_version — 获取curl相关的版本信息

curl_init()函数的作用初始化一个curl会话,curl_init()函数唯一的一个参数是可选的,表示一个url地址。

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

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

前段时间一直在用PHP写些小程序, 为此接触了Curl这个类. 感觉非常的强大, 在此把我遇到的一些功能记录下来;

php curl的几种用法

总结一下项目中用到curl的几种方式1. php curl的默认调用方法,get方式访问url$ch = curl_init();curl_setopt($ch, CURLOPT_HTTPHEADER, $header); //设置http头curl_setopt($ch, CURLOPT_ENCODING, "gzip" ); //设置为客户端支持gzip压缩curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30 ); //设置连接等待时间curl_setopt($ch, CURLOPT_URL, $url );curl_exec( $ch );if ($error = curl_error($ch) ) {//出错处理return -1;}fclose($fp);$curl_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); //获取http返回值if( $curl_code == 200 ) {//正常访问url}//异常2. 设置http header支持curl访问lighttpd服务器Java代码$header[]= 'Expect:';$header[]= 'Expect:';3. 设置curl,只获取http header,不获取body:Java代码curl_setopt($ch, CURLOPT_HEADER, 1);curl_setopt($ch, CURLOPT_NOBODY, 1);curl_setopt($ch, CURLOPT_HEADER, 1);curl_setopt($ch, CURLOPT_NOBODY, 1);或者只获取body:Java代码curl_setopt($ch, CURLOPT_HEADER, 0); // make sure we get the bodycurl_setopt($ch, CURLOPT_NOBODY, 0);curl_setopt($ch, CURLOPT_HEADER, 0); // make sure we get the bodycurl_setopt($ch, CURLOPT_NOBODY, 0);4. 访问虚拟主机,需设置Host$header[]= 'Host: '.$host;5. 使用post, put, delete等REStful方式访问urlpost:curl_setopt($ch, CURLOPT_POST, 1 );put, delete:curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "DELETE"); //或者PUT,需要服务器支持这些方法。6. 保存下载内容为文件

php curl 模拟登录并获取数据实例详解

PHP的curl()在抓取网页的效率方面是比较高的,而且支持多线程,而file_get_contents()效率就要稍低些,当然,使用curl时需要开启下curl扩展。

代码实战

先来看登录部分的代码:

//模拟登录

function

login_post($url,

$cookie,

$post)

{

$curl

=

curl_init();//初始化curl模块

curl_setopt($curl,

CURLOPT_URL,

$url);//登录提交的地址

curl_setopt($curl,

CURLOPT_HEADER,

0);//是否显示头信息

curl_setopt($curl,

CURLOPT_RETURNTRANSFER,

0);//是否自动显示返回的信息

curl_setopt($curl,

CURLOPT_COOKIEJAR,

$cookie);

//设置Cookie信息保存在指定的文件中

curl_setopt($curl,

CURLOPT_POST,

1);//post方式提交

curl_setopt($curl,

CURLOPT_POSTFIELDS,

http_build_query($post));//要提交的信息

curl_exec($curl);//执行cURL

curl_close($curl);//关闭cURL资源,并且释放系统资源

}

函数login_post()首先初始化curl_init(),然后使用curl_setopt()设置相关选项信息,包括要提交的url地址,保存的cookie文件,post的数据(用户名和密码等信息),是否返回信息等等,然后curl_exec执行curl,最后curl_close()释放资源。注意PHP自带的http_build_query()可以将数组转换成相连接的字符串。

接下来如果登录成功后,我们要获取登录成功后的页面信息。

//登录成功后获取数据

function

get_content($url,

$cookie)

{

$ch

=

curl_init();

curl_setopt($ch,

CURLOPT_URL,

$url);

curl_setopt($ch,

CURLOPT_HEADER,

0);

curl_setopt($ch,

CURLOPT_RETURNTRANSFER,

1);

curl_setopt($ch,

CURLOPT_COOKIEFILE,

$cookie);

//读取cookie

$rs

=

curl_exec($ch);

//执行cURL抓取页面内容

curl_close($ch);

return

$rs;

}

函数get_content()中也是先初始化curl,然后设置相关选项,执行curl,释放资源。其中我们设置CURLOPT_RETURNTRANSFER为1即自动返回信息,而CURLOPT_COOKIEFILE可以读取到登录时保存的cookie信息,最后将页面内容返回。

我们的最终目的是要获取到模拟登录后的信息,也就是只有正常登录成功后才能获取的有用信息。接下来我们以登录开源中国的移动版为例,看看如何抓取到登录成功后的信息。

//设置post的数据

$post

=

array

(

'email'

=

'oschina账户',

'pwd'

=

'oschina密码',

'goto_page'

=

'/my',

'error_page'

=

'/login',

'save_login'

=

'1',

'submit'

=

'现在登录'

);

//登录地址

$url

=

"";

//设置cookie保存路径

$cookie

=

dirname(__FILE__)

.

'/cookie_oschina.txt';

//登录后要获取信息的地址

$url2

=

"";

//模拟登录

login_post($url,

$cookie,

$post);

//获取登录页的信息

$content

=

get_content($url2,

$cookie);

//删除cookie文件

@

unlink($cookie);

//匹配页面信息

$preg

=

"/td

class='portrait'(.*)/td/i";

preg_match_all($preg,

$content,

$arr);

$str

=

$arr[1][0];

//输出内容

echo

$str;

使用总结

1、初始化curl;

2、使用curl_setopt设置目标url,和其他选项;

3、curl_exec,执行curl;

4、执行后,关闭curl;

5、输出数据。

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。