php-curl函数
PHP支持的由Daniel Stenberg创建的libcurl库允许你与各种的服务器使用各种类型的协议进行连接和通讯。
简单说就是使用curl可以实现各种的外部访问请求,今天为什么会想着记录一下curl,是因为遇到了curl外部接口失败的问题。
使用cURL一般有以下几个简单步骤:
1、初始化一个会话
2、设置 cURL 传输选项
3、执行会话
4、关闭会话
下面通过一个简单的例子来说明这4个步骤
这里主要记录一下curl_init和curl_error;
- curl_init(): 初始化一个cURL会话。失败时返回false
- curl_error(resource $ch)返回一个保护当前会话最近一次错误的字符串
示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | <?php // 创建一个新cURL资源 $ch = curl_init(); var_dump( $ch ); // 设置URL和相应的选项 curl_setopt( $ch , CURLOPT_URL, "http://www.baidu.com/" ); curl_setopt( $ch , CURLOPT_HEADER, true); curl_setopt( $ch , CURLOPT_RETURNTRANSFER, true); curl_setopt( $ch , CURLOPT_CONNECTTIMEOUT, 30); curl_setopt( $ch , CURLOPT_TIMEOUT, 30); curl_setopt( $ch , CURLOPT_HTTPHEADER, []); curl_setopt( $ch , CURLOPT_COOKIE, "cookie" ); var_dump( "ch->>>>>" . var_export( $ch , true)); // 抓取URL并把它传递给浏览器 $ret = curl_exec( $ch ); $errorMsg = curl_error( $ch ); var_dump( "ret->>>>>" . $ret ); // 关闭cURL资源,并且释放系统资源 curl_close( $ch ); ?> } |
输出:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 | resource(4) of type (curl) string(12) "ch->>>>>NULL" string(15612) "ret->>>>>HTTP/1.1 200 OK Accept-Ranges: bytes Cache-Control: no-cache Connection: keep-alive Content-Length: 14615 Content-Type: text/html Date : Sun, 26 Sep 2021 04:01:17 GMT P3p: CP= " OTI DSP COR IVA OUR IND COM " P3p: CP= " OTI DSP COR IVA OUR IND COM " Pragma: no-cache Server: BWS/1.1 Set-Cookie: BAIDUID=F1CF0784956A2A2854E4135EA0D649FF:FG=1; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com Set-Cookie: BIDUPSID=F1CF0784956A2A2854E4135EA0D649FF; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com Set-Cookie: PSTM=1632628877; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com Set-Cookie: BAIDUID=F1CF0784956A2A280A6821E05BE4A103:FG=1; max-age=31536000; expires=Mon, 26-Sep-22 04:01:17 GMT; domain=.baidu.com; path=/; version=1; comment=bd Traceid: 163262887703336965229545942739057384109 Vary: Accept-Encoding X-Frame-Options: sameorigin X-Ua-Compatible: IE=Edge,chrome=1 <!DOCTYPE html><!--STATUS OK--> <html> <head> <meta http-equiv= "content-type" content= "text/html;charset=utf-8" > <meta http-equiv= "X-UA-Compatible" content= "IE=Edge" > <link rel= "dns-prefetch" href= "//s1.bdstatic.com" /> <link rel= "dns-prefetch" href= "//t1.baidu.com" /> <link rel= "dns-prefetch" href= "//t2.baidu.com" /> <link rel= "dns-prefetch" href= "//t3.baidu.com" /> <link rel= "dns-prefetch" href= "//t10.baidu.com" /> <link rel= "dns-prefetch" href= "//t11.baidu.com" /> <link rel= "dns-prefetch" href= "//t12.baidu.com" /> <link rel= "dns-prefetch" href= "//b1.bdstatic.com" /> <title>百度一下,你就知道</title> <link href= "http://s1.bdstatic.com/r/www/cache/static/home/css/index.css" rel= "stylesheet" type= "text/css" /> <!--[ if lte IE 8]><style index= "index" >#content{height:480px\9}#m{top:260px\9}</style><![ endif ]--> <!--[ if IE 8]><style index= "index" >#u1 a.mnav,#u1 a.mnav:visited{font-family:simsun}</style><![ endif ]--> <script> var hashMatch = document.location.href.match(/#+(.*wd=[^&].+)/); if (hashMatch && hashMatch[0] && hashMatch[1]) {document.location.replace( "http://" +location.host+ "/s?" +hashMatch[1]);} var ns_c = function (){};</script> <script> function h(obj){obj.style.behavior= 'url(#default#homepage)' ; var a = obj.setHomePage( '//www.baidu.com/' );}</script> <noscript><meta http-equiv= "refresh" content= "0; url=/baidu.html?from=noscript" /></noscript> <script>window._ASYNC_START= new Date ().getTime();</script> </head> <body link= "#0000cc" ><div id= "wrapper" style= "display:none;" ><div id= "u" ><a href= "//www.baidu.com/gaoji/preferences.html" onmousedown= "return user_c({'fm':'set','tab':'setting','login':'0'})" >搜索设置</a>|<a id= "btop" href= "/" onmousedown= "return user_c({'fm':'set','tab':'index','login':'0'})" >百度首页</a>|<a id= "lb" href= "https://passport.baidu.com/v2/?login&tpl=mn&u=http%3A%2F%2Fwww.baidu.com%2F" onclick= "return false;" onmousedown= "return user_c({'fm':'set','tab':'login'})" >登录</a><a href= "https://passport.baidu.com/v2/?reg®Type=1&tpl=mn&u=http%3A%2F%2Fwww.baidu.com%2F" onmousedown= "return user_c({'fm':'set','tab':'reg'})" target= "_blank" class = "reg" >注册</a></div><div id= "head" ><div class = "s_nav" ><a href= "/" class = "s_logo" onmousedown= "return c({'fm':'tab','tab':'logo'})" ><img src= "//www.baidu.com/img/baidu_jgylogo3.gif" width= "117" height= "38" border= "0" alt= "到百度首页" title= "到百度首页" ></a><div class = "s_tab" id= "s_tab" ><a href= "http://news.baidu.com/ns?cl=2&rn=20&tn=news&word=" wdfield= "word" onmousedown= "return c({'fm':'tab','tab':'news'})" >新闻</a> <b>网页</b> <a href= "http://tieba.baidu.com/f?kw=&fr=wwwt" wdfield= "kw" onmousedown= "return c({'fm':'tab','tab':'tieba'})" >贴吧</a> <a href= "http://zhidao.baidu.com/q?ct=17&pn=0&tn=ikaslist&rn=10&word=&fr=wwwt" wdfield= "word" onmousedown= "return c({'fm':'tab','tab':'zhidao'})" >知道</a> <a href= "http://music.baidu.com/search?fr=ps&key=" wdfield= "key" onmousedown= "return c({'fm':'tab','tab':'music'})" >音乐</a> <a href= "http://image.baidu.com/i?tn=baiduimage&ps=1&ct=201326592&lm=-1&cl=2&nc=1&word=" wdfield= "word" onmousedown= "return c({'fm':'tab','tab':'pic'})" >图片</a> <a href= "http://v.baidu.com/v?ct=301989888&rn=20&pn=0&db=0&s=25&word=" wdfield= "word" onmousedown= "return c({'fm':'tab','tab':'video'})" >视频</a> <a href= "http://map.baidu.com/m?word=&fr=ps01000" wdfield= "word" onmousedown= "return c({'fm':'tab','tab':'map'})" >地图</a> <a href= "http://wenku.baidu.com/search?word=&lm=0&od=0" wdfield= "word" onmousedown= "return c({'fm':'tab','tab':'wenku'})" >文库</a> <a href= "//www.baidu.com/more/" onmousedown= "return c({'fm':'tab','tab':'more'})" >更多»</a></div></div><form id= "form" name= "f" action= "/s" class = "fm" ><input type= "hidden" name= "ie" value= "utf-8" ><input type= "hidden" name= "f" value= "8" ><input type= "hidden" name= "rsv_bp" value= "1" ><span class = "bg s_ipt_wr" ><input name= "wd" id= "kw" class = "s_ipt" value= "" maxlength= "100" ></span><span class = "bg s_btn_wr" ><input type= "submit" id= "su" value= "百度一下" class = "bg s_btn" onmousedown= "this.className='bg s_btn s_btn_h'" onmouseout= "this.className='bg s_btn'" ></span><span class = "tools" ><span id= "mHolder" ><div id= "mCon" ><span>输入法</span></div><ul id= "mMenu" ><li><a href= "javascript:;" name= "ime_hw" >手写</a></li><li><a href= "javascript:;" name= "ime_py" >拼音</a></li><li class = "ln" ></li><li><a href= "javascript:;" name= "ime_cl" >关闭</a></li></ul></span><span class = "shouji" ><strong>推荐 : </strong><a href= "http://w.x.baidu.com/go/mini/8/10000020" onmousedown= "return ns_c({'fm':'behs','tab':'bdbrowser'})" >百度浏览器,打开网页快2秒!</a></span></span></form></div><div id= "content" ><div id= "u1" ><a href= "http://news.baidu.com" name= "tj_trnews" class = "mnav" >新闻</a><a href= "http://www.hao123.com" name= "tj_trhao123" class = "mnav" >hao123</a><a href= "http://map.baidu.com" name= "tj_trmap" class = "mnav" >地图</a><a href= "http://v.baidu.com" name= "tj_trvideo" class = "mnav" >视频</a><a href= "http://tieba.baidu.com" name= "tj_trtieba" class = "mnav" >贴吧</a><a href= "https://passport.baidu.com/v2/?login&tpl=mn&u=http%3A%2F%2Fwww.baidu.com%2F" name= "tj_login" id= "lb" onclick= "return false;" >登录</a><a href= "//www.baidu.com/gaoji/preferences.html" name= "tj_settingicon" id= "pf" >设置</a><a href= "//www.baidu.com/more/" name= "tj_briicon" id= "bri" >更多产品</a></div><div id= "m" ><p id= "lg" ><img src= "//www.baidu.com/img/bd_logo.png" width= "270" height= "129" ></p><p id= "nv" ><a href= "http://news.baidu.com" >新 闻</a> <b>网 页</b> <a href= "http://tieba.baidu.com" >贴 吧</a> <a href= "http://zhidao.baidu.com" >知 道</a> <a href= "http://music.baidu.com" >音 乐</a> <a href= "http://image.baidu.com" >图 片</a> <a href= "http://v.baidu.com" >视 频</a> <a href= "http://map.baidu.com" >地 图</a></p><div id= "fm" ><form id= "form1" name= "f1" action= "/s" class = "fm" ><span class = "bg s_ipt_wr" ><input type= "text" name= "wd" id= "kw1" maxlength= "100" class = "s_ipt" ></span><input type= "hidden" name= "rsv_bp" value= "0" ><input type=hidden name=ch value= "" ><input type=hidden name=tn value= "baidu" ><input type=hidden name=bar value= "" ><input type= "hidden" name= "rsv_spt" value= "3" ><input type= "hidden" name= "ie" value= "utf-8" ><span class = "bg s_btn_wr" ><input type= "submit" value= "百度一下" id= "su1" class = "bg s_btn" onmousedown= "this.className='bg s_btn s_btn_h'" onmouseout= "this.className='bg s_btn'" ></span></form><span class = "tools" ><span id= "mHolder1" ><div id= "mCon1" ><span>输入法</span></div></span></span><ul id= "mMenu1" ><div class = "mMenu1-tip-arrow" ><em></em><ins></ins></div><li><a href= "javascript:;" name= "ime_hw" >手写</a></li><li><a href= "javascript:;" name= "ime_py" >拼音</a></li><li class = "ln" ></li><li><a href= "javascript:;" name= "ime_cl" >关闭</a></li></ul></div><p id= "lk" ><a href= "http://baike.baidu.com" >百科</a> <a href= "http://wenku.baidu.com" >文库</a> <a href= "http://www.hao123.com" >hao123</a><span> | <a href= "//www.baidu.com/more/" >更多>></a></span></p><p id= "lm" ></p></div></div><div id= "ftCon" ><div id= "ftConw" ><p id= "lh" ><a id= "seth" onClick= "h(this)" href= "/" onmousedown= "return ns_c({'fm':'behs','tab':'homepage','pos':0})" >把百度设为主页</a><a id= "setf" href= "//www.baidu.com/cache/sethelp/index.html" onmousedown= "return ns_c({'fm':'behs','tab':'favorites','pos':0})" target= "_blank" >把百度设为主页</a><a onmousedown= "return ns_c({'fm':'behs','tab':'tj_about'})" href= "http://home.baidu.com" >关于百度</a><a onmousedown= "return ns_c({'fm':'behs','tab':'tj_about_en'})" href= "http://ir.baidu.com" >About Baidu</a></p><p id= "cp" >©2018 Baidu <a href= "/duty/" name= "tj_duty" >使用百度前必读</a> 京ICP证030173号 <img src= "http://s1.bdstatic.com/r/www/cache/static/global/img/gs_237f015b.gif" ></p></div></div><div id= "wrapper_wrapper" ></div></div><div class = "c-tips-container" id= "c-tips-container" ></div> <script>window.__async_strategy=2;</script> <script> var bds={se:{},su:{urdata:[],urSendClick: function (){}},util:{}, use :{},comm : {domain: "http://www.baidu.com" ,ubsurl : "http://sclick.baidu.com/w.gif" ,tn: "baidu" ,queryEnc: "" ,queryId: "" ,inter: "" ,templateName: "baidu" ,sugHost : "http://suggestion.baidu.com/su" ,query : "" ,qid : "" ,cid : "" ,sid : "" ,indexSid : "" ,stoken : "" ,serverTime : "" ,user : "" ,username : "" ,loginAction : [],useFavo : "" ,pinyin : "" ,favoOn : "" ,curResultNum: "" ,rightResultExist:false,protectNum:0,zxlNum:0,pageNum:1,pageSize:10,newindex:0,async:1,maxPreloadThread:5,maxPreloadTimes:10,preloadMouseMoveDistance:5,switchAddMask:false,isDebug:false,ishome : 1},_base64:{domain : "http://b1.bdstatic.com/" ,b64Exp : -1,pdc : 0}}; var name,navigate,al_arr=[]; var selfOpen = window.open; eval ( "var open = selfOpen;" ); var isIE=navigator.userAgent.indexOf( "MSIE" )!=-1&&!window.opera; var E = bds.ecom= {};bds.se.mon = { 'loadedItems' :[], 'load' : function (){}, 'srvt' :-1}; try {bds.se.mon.srvt = parseInt(document.cookie.match( new RegExp( "(^| )BDSVRTM=([^;]*)(;|$)" ))[2]);document.cookie= "BDSVRTM=;expires=Sat, 01 Jan 2000 00:00:00 GMT" ; } catch (e){}</script> <script> if (!location.hash.match(/[^a-zA-Z0-9]wd=/)){document.getElementById( "ftCon" ).style.display= 'block' ;document.getElementById( "u1" ).style.display= 'block' ;document.getElementById( "content" ).style.display= 'block' ;document.getElementById( "wrapper" ).style.display= 'block' ;setTimeout( function (){ try {document.getElementById( "kw1" ).focus();document.getElementById( "kw1" ).parentNode.className += ' iptfocus' ;} catch (e){}},0);}</script> <script type= "text/javascript" src= "http://s1.bdstatic.com/r/www/cache/static/jquery/jquery-1.10.2.min_f2fb5194.js" ></script> <script>( function (){ var index_content = $( '#content' ); var index_foot= $( '#ftCon' ); var index_css= $( 'head [index]' ); var index_u= $( '#u1' ); var result_u= $( '#u' ); var wrapper=$( "#wrapper" );window.index_on= function (){index_css.insertAfter( "meta:eq(0)" );result_common_css.remove();result_aladdin_css.remove();result_sug_css.remove();index_content.show();index_foot.show();index_u.show();result_u.hide();wrapper.show(); if (bds.su&&bds.su.U&&bds.su.U.homeInit){bds.su.U.homeInit();}setTimeout( function (){ try {$( '#kw1' ).get(0).focus();window.sugIndex.start();} catch (e){}},0); if (typeof initIndex== 'function' ){initIndex();}};window.index_off= function (){index_css.remove();index_content.hide();index_foot.hide();index_u.hide();result_u.show();result_aladdin_css.insertAfter( "meta:eq(0)" );result_common_css.insertAfter( "meta:eq(0)" );result_sug_css.insertAfter( "meta:eq(0)" );wrapper.show();};})();</script> <script>window.__switch_add_mask=1;</script> <script type= "text/javascript" src= "http://s1.bdstatic.com/r/www/cache/static/global/js/instant_search_newi_redirect1_20bf4036.js" ></script> <script>initPreload();$( "#u,#u1" ).delegate( "#lb" , 'click' , function (){ try {bds.se.login.open();} catch (e){}}); if (navigator.cookieEnabled){document.cookie= "NOJS=;expires=Sat, 01 Jan 2000 00:00:00 GMT" ;}</script> <script>$( function (){ for (i=0;i<3;i++){u($($( '.s_ipt_wr' )[i]),$($( '.s_ipt' )[i]),$($( '.s_btn_wr' )[i]),$($( '.s_btn' )[i]));} function u(iptwr,ipt,btnwr,btn){ if (iptwr && ipt){iptwr.on( 'mouseover' , function (){iptwr.addClass( 'ipthover' );}).on( 'mouseout' , function (){iptwr.removeClass( 'ipthover' );}).on( 'click' , function (){ipt.focus();});ipt.on( 'focus' , function (){iptwr.addClass( 'iptfocus' );}).on( 'blur' , function (){iptwr.removeClass( 'iptfocus' );}).on( 'render' , function (e){ var $s = iptwr.parent().find( '.bdsug' ); var l = $s .find( 'li' ).length; if (l>=5){ $s .addClass( 'bdsugbg' );} else { $s .removeClass( 'bdsugbg' );}});} if (btnwr && btn){btnwr.on( 'mouseover' , function (){btn.addClass( 'btnhover' );}).on( 'mouseout' , function (){btn.removeClass( 'btnhover' );});}}});</script> <script type= "text/javascript" src= "http://s1.bdstatic.com/r/www/cache/static/home/js/bri_7f1fa703.js" ></script> <script>( function (){ var _init=false;window.initIndex= function (){ if (_init){ return ;}_init=true; var w=window,d=document,n=navigator,k=d.f1.wd,a=d.getElementById( "nv" ).getElementsByTagName( "a" ),isIE=n.userAgent.indexOf( "MSIE" )!=-1&&!window.opera;( function (){ if (/q=([^&]+)/.test(location.search)){k.value=decodeURIComponent(RegExp[ "\x241" ])}})();( function (){ var u = G( "u1" ).getElementsByTagName( "a" ), nv = G( "nv" ).getElementsByTagName( "a" ), lk = G( "lk" ).getElementsByTagName( "a" ), un = "" ; var tj_nv = [ "news" , "tieba" , "zhidao" , "mp3" , "img" , "video" , "map" ]; var tj_lk = [ "baike" , "wenku" , "hao123" , "more" ];un = bds.comm.user == "" ? "" : bds.comm.user; function _addTJ(obj){addEV(obj, "mousedown" , function (e){ var e = e || window.event; var target = e.target || e.srcElement; if (target.name){ns_c({ 'fm' : 'behs' , 'tab' :target.name, 'un' :encodeURIComponent(un)});}});} for ( var i = 0; i < u.length; i++){_addTJ(u[i]);} for ( var i = 0; i < nv.length; i++){nv[i].name = 'tj_' + tj_nv[i];} for ( var i = 0; i < lk.length; i++){lk[i].name = 'tj_' + tj_lk[i];}})();( function () { var links = { 'tj_news' : [ 'word' , 'http://news.baidu.com/ns?tn=news&cl=2&rn=20&ct=1&ie=utf-8' ], 'tj_tieba' : [ 'kw' , 'http://tieba.baidu.com/f?ie=utf-8' ], 'tj_zhidao' : [ 'word' , 'http://zhidao.baidu.com/search?pn=0&rn=10&lm=0' ], 'tj_mp3' : [ 'key' , 'http://music.baidu.com/search?fr=ps&ie=utf-8' ], 'tj_img' : [ 'word' , 'http://image.baidu.com/i?ct=201326592&cl=2&nc=1&lm=-1&st=-1&tn=baiduimage&istype=2&fm=&pv=&z=0&ie=utf-8' ], 'tj_video' : [ 'word' , 'http://video.baidu.com/v?ct=301989888&s=25&ie=utf-8' ], 'tj_map' : [ 'wd' , 'http://map.baidu.com/?newmap=1&ie=utf-8&s=s' ], 'tj_baike' : [ 'word' , 'http://baike.baidu.com/search/word?pic=1&sug=1&enc=utf8' ], 'tj_wenku' : [ 'word' , 'http://wenku.baidu.com/search?ie=utf-8' ]}; var domArr = [G( 'nv' ), G( 'lk' ),G( 'cp' )],kw = G( 'kw1' ); for ( var i = 0, l = domArr.length; i < l; i++) {domArr[i].onmousedown = function (e) {e = e || window.event; var target = e.target || e.srcElement,name = target.getAttribute( 'name' ),items = links[name],reg = new RegExp( '^\\s+|\\s+\x24' ),key = kw.value.replace(reg, '' ); if (items) { if (key.length > 0) { var wd = items[0], url = items[1],url = url + ( name === 'tj_map' ? encodeURIComponent( '&' + wd + '=' + key) : ( ( url.indexOf( '?' ) > 0 ? '&' : '?' ) + wd + '=' + encodeURIComponent(key) ) );target.href = url;} else {target.href = target.href.match( new RegExp( '^http:\/\/.+\.baidu\.com' ))[0];}}name && ns_c({ 'fm' : 'behs' , 'tab' : name, 'query' : encodeURIComponent(key), 'un' : encodeURIComponent(bds.comm.user || '' ) });};}})();}; if (window.pageState==0){initIndex();}})();document.cookie = 'IS_STATIC=1;expires=' + new Date ( new Date ().getTime() + 10*60*1000).toGMTString();</script> </body></html> " } |
posted on 2021-09-26 17:35 1450811640 阅读(241) 评论(0) 编辑 收藏 举报
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~