Login
网站首页 > 文章中心 > 其它

php中的curl常用例子

作者:小编 更新时间:2023-08-16 11:01:30 浏览量:498人看过

curl命令在PHP中怎么用

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

php

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_SSL_VERIFYPEER,?false);?//?只信任CA颁布的证书?

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

//?从证书中检查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_CONNECTTIMEOUT,?$timeout);//用来告诉PHP脚本在成功连接服务器前等待多久(连接成功之后就会开始缓冲输出),这个参数是为了应对目标服务器的过载,下线,或者崩溃等可能状况;

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

//?自动设置Referer

curl_setopt($curl,?CURLOPT_AUTOREFERER,?1);

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

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

curl_close($curl);

return?$data;

PHP中的curl_exec

curl_exec

可以参考官方网站范例:

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

实际例子:

//?创建一个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连线

//?设定撷取的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连线

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

简易的使用语法(POST):

//设定要传的?变数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);

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

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的几种用法

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);//登录提交的地址

CURLOPT_HEADER,

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

CURLOPT_RETURNTRANSFER,

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

CURLOPT_COOKIEJAR,

$cookie);

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

CURLOPT_POST,

①.);//post方式提交

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()可以将数组转换成相连接的字符串.

此时此刻呢如果登录成功后,我们要获取登录成功后的页面信息.

//登录成功后获取数据

get_content($url,

$cookie)

$ch

curl_init();

curl_setopt($ch,

$url);

0);

①.);

CURLOPT_COOKIEFILE,

//读取cookie

$rs

//执行cURL抓取页面内容

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';

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

$post);

//获取登录页的信息

$content

//删除cookie文件

@

unlink($cookie);

//匹配页面信息

$preg

"/td

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

preg_match_all($preg,

$content,

$arr);

$str

$arr[1][0];

//输出内容

echo

$str;

使用总结

①.、初始化curl;

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

版权声明:倡导尊重与保护知识产权。未经许可,任何人不得复制、转载、或以其他方式使用本站《原创》内容,违者将追究其法律责任。本站文章内容,部分图片来源于网络,如有侵权,请联系我们修改或者删除处理。

编辑推荐

热门文章