|
admin 发表于 2021-5-29 16:25:32
26347
102
课程目录, v R- P4 n1 q) N6 L# `. l
( a2 b# u: l/ _+ n6 Z1、curl是什么9 X, W$ x) M! }. ?( W' X
! ~; t5 _9 ?- P2 x6 U% r百度百科给的解释是:数据传输神器。那它神器在什么地方那,通过查找资料得出curl可以使用url的语法模拟浏览器来传输数据,因为是模拟浏览器所以它支持多种的网络协议。目前支持http、https、ftp、gopher、telnet、dict、file和ldap协议。libcurl同时也支持HTTPS认证、HTTP POST、HTTP PUT、 FTP 上传(这个也能通过PHP的FTP扩展完成)、HTTP 基于表单的上传、代理、cookies和用户名+密码的认证。1 e1 H. T/ T# L6 G! B$ O# M
php中使用最多的是通过curl来模拟get和post请求。
/ F; F0 ~8 {$ [" h0 l7 T
+ |" V4 G& i3 v7 ]2、如何使用curl2 g1 t* {7 z( ~, O
5 `- m3 }9 y; E
(1)、要想使用curl,第一步先要在php中开启curl,在php配置文件php.ini中找到extension=php_curl.dll,把前面的‘;’去掉。重启服务器。在php代码中用phpinfo()打印,发现图中curl说明开启成功。
7 u3 X( H& r7 A( d
9 y, d9 n3 |9 f
' A6 `+ A& I% g% _8 V, x& F(2)、使用curl完成简单的请求主要分为四大步:) ^8 f7 ]6 z1 m9 T; L8 N- j
6 n/ h, N2 R' Q; j7 q* O6 a. U/ R) y% a/ k% u
1).初始化,创建一个新的curl资源。2 _# w% u* W& ^, L$ J
3 C; B; Z) r& `, V; |9 r5 \5 |5 N. i" j( D
2).设置url和相应的选项
9 v) E+ h8 Z Q. E& n. f+ C5 M9 |1 h4 o. M1 A# u; ~
1 P/ D* c& [- D* J7 `3).抓取url并把他传递给浏览器7 }8 X% j# Q; \( S% }/ k+ v: s% R
8 s' E1 a. z1 N3 j' a2 `3 b5 n' n4 U
% ]3 x; R9 A9 x
4).关闭curl资源。把资源释放。
2 E" M. s, h5 Y7 G6 i/ l
; q* F& b5 _4 f" Y2 P$ }$ a6 T' E: H
$ ?, P, S3 e' z* R$ j w9 I2 ]复制代码
. x- T2 S, u- J0 `
% _8 P' o2 ]" V* n 1 $MyAES = new MyAES();5 B* \$ ~+ n) U
2 $jiaRes = $MyAES->desEncryptStr($data,"1102130405061708");8 o) n: c- k3 L& a
3 $header[] = "Content-type: text/xml;charset=UTF-8";/ \1 W$ k! j# P! @2 j
4 $ch = curl_init();
# U7 H$ E* i$ k, j5 p" W; h4 C 5 curl_setopt($ch, CURLOPT_URL,REURL);+ D0 F# `& E: q& K' Z1 J, h
6 curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
+ {8 g, m0 c( { 7 curl_setopt($ch, CURLOPT_HTTPHEADER,$header);, O6 C2 _1 n& J- m$ N" z# t; r
8 curl_setopt($ch, CURLOPT_POST, true);. U% d2 H3 T; q, V, ?) U
9 curl_setopt($ch, CURLOPT_POSTFIELDS, $jiaRes);
6 K3 J" n! {* x {- k9 c& y10 $aa = curl_exec($ch);% s3 w2 y) I' e. N
11 // grab URL, and print , v3 d4 W: D% u$ W) B0 ^5 E
12 if(curl_errno($ch)){3 B7 p) D: w% }8 a9 x1 ^
13 print curl_error($ch);
8 }1 G7 o8 T, g! K14 }
+ X9 d Q* C. [1 o0 x15 curl_close($ch);
& b: T: N3 v5 v! [9 U; E2 g7 n$ x6 W- I
复制代码% f, g \9 D& |
- g6 X7 _, Q, J1 P# s5 g6 P% P4 j: e
. ~6 T6 i4 z! F6 h# Y/ z
贴上项目一段代码,好好的分析一下。
* R: @+ U/ ?4 l3 R* V
$ @! n1 V. \9 j. J- o2 y. M- G6 W; X; r/ n& Z5 o' M1 q
curl_init这个是初始化,创建一个新的curl资源。
6 z" s: V/ V* Y3 b% ?1 u( c$ k6 d' l
curl_setopt这个是php的函数。设置一个curl传输选项。) q; J3 n% y: i" }3 n4 I$ j
根据php手册对curl_setopt这个函数说明一下,这个函数需要传三个参数,第一个是curl句柄(我的理解就是那个创建的curl资源)。第二个是需要设置的curlopt_XX选项。第三个参数就是选项对应的值。% R j* o- I8 R0 z. h: i5 ?4 X
" x4 x x$ c! p9 |' e. W) M; U& _curl_exec函数是执行curl会话。这个函数是初始化一个curl并且全部的选项都设置之后再调用。
$ T8 |9 R9 h! k/ D成功时返回 TRUE, 或者在失败时返回 FALSE。 然而,如果 CURLOPT_RETURNTRANSFER选项被设置,函数执行成功时会返回执行的结果,失败时返回 FALSE 。
# {5 K' j0 Z" a, Y* G% N" R/ z) y" J6 C( |! T0 [3 n
CURLOPT_URL 需要获取的url地址 CURLOPT_RETURNTRANSFER 将curl_exec()获取的信息以文件流的形式返回,而不是直接输出。
$ {- }" F) s1 t7 e: n% B3 X
7 {6 m7 e. g% B. u: Z' D4 U. ~6 j. JCURLOPT_HTTPHEADER 一个用来设置HTTP头字段的数组。使用如下的形式的数组进行设置: array('Content-type: text/plain', 'Content-length: 100') / T, X) f; t) G' b7 f' C
8 u7 @' X( T5 C# v' kCURLOPT_POST 启用时会发送一个常规的POST请求 CURLOPT_POSTFIELDS 全部数据以http协议中post方式发送。
* j2 u- R/ P" n: Y0 u( D$ Z8 K% |' Z( i$ g# r6 A' D
# F( l; ]) u$ @! p4 F) L; _1 Q
跟多curlopt对应的设置请查看php文档 http://php.net/manual/zh/book.curl.php
+ o1 k& E# I" @9 f9 z: S0 i" X+ c H, K# g
特意说明一下curl_setopt_array — 为 cURL 传输会话批量设置选项. k) [9 z: q. m# {) j. L* ?
使用案例为$ S3 G. w& S7 v1 L; Z$ H
& j) v" q3 i7 h! N; A; z4 b
0 w- Z% k$ k- o) s复制代码
; X0 l# a' b$ c# ^6 h: Q1 i: }) q. z
1 <?php
" z' b X4 x! E' m 2 // 创建一个新cURL资源
- c+ M5 @2 J% d% v! Z 3 $ch = curl_init();, V% D! M3 o+ G' @% \
4
( E6 B: u3 f6 B/ J* F" W8 V( d 5 // 设置URL和相应的选项2 e5 M" r- j# S) `9 p
6 $options = array(CURLOPT_URL => 'http://www.example.com/',
0 |" d {2 [ r- ~ 7 CURLOPT_HEADER => false8 u, q; v9 z# G- x$ C
8 );
9 I- Y' S7 v; j9 S! A% v# z2 j3 j 9 - g) m2 r$ f8 l h) G
10 curl_setopt_array($ch, $options);
- ~% Q4 e8 @( T- N5 Z7 x11 7 ]/ f: Q: G0 ?. [" d
12 // 抓取URL并把它传递给浏览器% t3 J) O% U1 E
13 curl_exec($ch);
% j& l. J3 ~9 \14
( U m9 Q. e- {0 w5 {# \0 e15 // 关闭cURL资源,并且释放系统资源
1 y7 i8 B; l1 D& V" _. V# {16 curl_close($ch);
+ y( c( d8 k# q! s" s17 ?>
" a3 R6 M& B: n9 a& n$ l* f3 ^2 x6 y; l' D+ }6 c8 J
复制代码
0 @) w8 r; p2 n% C5 I: ]4 s$ s( i
2 f( Z! E8 I) Z8 X$ e5 E, E
& t: r% }+ b, {curl是很强大的,例如,我们只想把获取到的内容输入到文件,而不是直接输出给浏览器,我们就可以使用CURLOPT_RETURNTRANSFER选项!' U( Z- q8 b/ V w
0 _; g# {$ N3 a; x- ^: Y7 P
- B' e, q5 V" P; ~5 S' N0 l! y/ j0 }5 |
这样在curl执行的时候,就会把页面的内容输出到文件当中,我们就可以完成采集等功能啦!
$ _4 C/ T \, P' a8 K3 d2 I/ q
2 b8 F \$ r* S8 R% D, S2 {# F& L N/ `2 B2 C" B4 M! D( K p
效率方面,curl的原理是模拟浏览器的操作,它的效率要比file_get_contents()高出四倍以上,试想一下,我们1 Y1 G1 t5 S. M( F/ H" n
8 p( s d" k/ p: O+ f6 i
# b6 f# D/ q: p8 m2 j( I/ m
1 j- h B# T# V+ t$ ]! f% K要采集一个信息量特别庞大的站,运行效率的差别可想而知!
9 N' J! J/ e1 \& l4 u; A
6 Y. R- v5 j3 G+ B: D
) q: b/ Z8 E& a
$ B. s4 P; ]) m* ]& \9 I不单单是效率上,稳定忄生上来说,curl也远比file_get_contents()函数要好很多!
s9 ?' O3 S. v. \7 B- w0 n7 A
' ~( f7 }3 _/ }* r( _- x
& x+ |6 f! V) L9 J0 h* ^7 A& Q+ K
' v, {0 m; E9 t2 {资源存放>百度网盘( {6 q9 y8 K0 w% ~" o: w. }
! p4 X x6 ?! j( P* j
下载地址
0 N2 ?, p- u! F4 t5 w: f: m4 v: E% J, c0 E7 ?! s
VIP会员全站免金币
) @1 `5 l9 U2 B2 q: M7 P& tIT直通车已为全国各地程序员提供上千G课程资源% ~. H0 H$ f$ A) j
如您需要购买本站VIP会员,请点击「开通VIP」享受全站资源免金币无限制下载!
$ i& B8 F- N; I$ W+ H
# j- v2 D# [: C, l) h) V失效反馈: [ I) T+ W8 K! |
IT直通车所有资源都存放在自己注册的百度网盘,失效可修复,确保持续可用8 s( Q( ^) t6 E, t& T0 R- c& y
如您需要的资源链接提示失效,请尽情反馈给我们,将在收到反馈后尽快修复「点击反馈」
9 B1 ^3 v* S$ q
( T% A5 \3 s' {+ G6 S. d获得帮助
/ G2 E7 Z" F- Y需要帮助吗?点击网站右侧在线客服,7X12小时在线!' l" i7 j" U" I# w/ b
2 k: ?# y ^! p$ E1 L
, E) J6 x! ]+ J1 `# A- J" P- X |
|