|
admin 发表于 2021-5-29 16:25:32
27992
103
课程目录
+ `2 c5 r+ a- f- G8 N1 r! o- K# }9 B# f
1、curl是什么
( a9 G7 ?2 w- A; S7 L/ _4 E- Q, [3 |# o3 U# o' `
百度百科给的解释是:数据传输神器。那它神器在什么地方那,通过查找资料得出curl可以使用url的语法模拟浏览器来传输数据,因为是模拟浏览器所以它支持多种的网络协议。目前支持http、https、ftp、gopher、telnet、dict、file和ldap协议。libcurl同时也支持HTTPS认证、HTTP POST、HTTP PUT、 FTP 上传(这个也能通过PHP的FTP扩展完成)、HTTP 基于表单的上传、代理、cookies和用户名+密码的认证。# _/ v# z i9 l- e+ P- e
php中使用最多的是通过curl来模拟get和post请求。- c {3 f* ]% [+ ^2 p$ n4 O
# G' A) v! _5 `4 w/ r
2、如何使用curl
% ]6 i, s2 y- I& j& f1 ?- c: r
. e; J. T; k7 b(1)、要想使用curl,第一步先要在php中开启curl,在php配置文件php.ini中找到extension=php_curl.dll,把前面的‘;’去掉。重启服务器。在php代码中用phpinfo()打印,发现图中curl说明开启成功。: @- Q' c) Q, q6 q
1 p( |+ |/ p) k, n. N* x% ]3 |: Z1 u2 b
(2)、使用curl完成简单的请求主要分为四大步:
' J( \2 M' |, m( g6 N$ o2 _" {( x: u* x# v H7 _
% m1 e7 h2 X; V- }& R% R1).初始化,创建一个新的curl资源。
3 p" u$ g \0 I0 p$ K% c1 e e8 s9 B9 P! V
6 K {0 x# c4 N) x+ v: ^
2).设置url和相应的选项
7 Z0 @* Z4 u1 i' G. w: i2 }/ E2 J: }% n6 ^- }' ?- G
, I% s9 ^: Q* ?/ g; l- R
3).抓取url并把他传递给浏览器
; P- k5 P. P- |, L) v" a) @$ G8 u3 ^. T- T, h
' e: ]& F( U$ i! K/ L1 `4 d' ]4).关闭curl资源。把资源释放。 z" W7 `% e8 M3 ^# _
2 N5 ~- [ D" v) a8 Z) L$ a
* a! p! C& Z$ z% x+ b
T1 M' S5 s3 R% ~* T复制代码+ |+ E) \) s/ D7 ~$ m7 k* v
/ W' t' W, W2 e' o1 l 1 $MyAES = new MyAES();
* m& D8 h+ R8 M 2 $jiaRes = $MyAES->desEncryptStr($data,"1102130405061708");5 t: c* r' j' ~* E) Y1 k& `9 l' y" Q: ^
3 $header[] = "Content-type: text/xml;charset=UTF-8";, m9 L# |2 Y# h1 J& ^
4 $ch = curl_init();3 Q/ }! j1 i9 {$ [
5 curl_setopt($ch, CURLOPT_URL,REURL);
" h% @& z6 _6 z2 b' q3 c2 w 6 curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
$ ] s8 ~# Q4 i! Y8 N2 t/ | 7 curl_setopt($ch, CURLOPT_HTTPHEADER,$header);8 U3 A$ Z% j; G& ~2 X) [2 l7 u
8 curl_setopt($ch, CURLOPT_POST, true);& z$ J) ]$ a; F- F+ S7 j1 n
9 curl_setopt($ch, CURLOPT_POSTFIELDS, $jiaRes);* T( B! r. R7 T, q3 u2 n5 A' L2 I
10 $aa = curl_exec($ch);% U: ?7 n `( `2 A
11 // grab URL, and print 0 Y1 _& t8 ]( v' z v
12 if(curl_errno($ch)){
" b$ s, W# c" n. H0 s( s; P8 r" `13 print curl_error($ch);
0 z3 @1 j$ Z( g3 f- p14 } y8 b8 `) {% |3 G0 L7 d
15 curl_close($ch);
2 [1 j+ v" G: Z5 L6 o
0 Q" `; G! i! d3 n/ U复制代码# Y! ~: e/ H5 E- [0 K
! U/ C9 V3 r7 @6 U( t3 l$ l+ J1 Z3 V7 b" ?3 v
贴上项目一段代码,好好的分析一下。
/ \1 L1 G0 a: C5 X
7 o5 t& `. i1 c q* ~0 {; {
/ q2 U$ K5 k- M# Dcurl_init这个是初始化,创建一个新的curl资源。
- F9 W2 W' v; I& q( y$ N
! U2 K+ n8 }9 Y! X" c- N6 i) Ocurl_setopt这个是php的函数。设置一个curl传输选项。) F1 u# C( c( [+ H5 h! {
根据php手册对curl_setopt这个函数说明一下,这个函数需要传三个参数,第一个是curl句柄(我的理解就是那个创建的curl资源)。第二个是需要设置的curlopt_XX选项。第三个参数就是选项对应的值。5 G& N) a* M4 f# e; }
" ]: M# Z& ]* A( h- i4 x9 z; Ccurl_exec函数是执行curl会话。这个函数是初始化一个curl并且全部的选项都设置之后再调用。7 \ c0 _* L/ V2 o2 }$ g
成功时返回 TRUE, 或者在失败时返回 FALSE。 然而,如果 CURLOPT_RETURNTRANSFER选项被设置,函数执行成功时会返回执行的结果,失败时返回 FALSE 。 ! h$ z5 I$ U& S4 m% e
- p7 @6 h) k* i6 g
CURLOPT_URL 需要获取的url地址 CURLOPT_RETURNTRANSFER 将curl_exec()获取的信息以文件流的形式返回,而不是直接输出。
7 d* |) I7 f r: e% E. [/ G) _. E" e1 }0 ?2 g1 M p4 [1 z
CURLOPT_HTTPHEADER 一个用来设置HTTP头字段的数组。使用如下的形式的数组进行设置: array('Content-type: text/plain', 'Content-length: 100')
8 z" C" O. S/ }0 i! K% F3 _) a" l3 @- U+ H) U: i
CURLOPT_POST 启用时会发送一个常规的POST请求 CURLOPT_POSTFIELDS 全部数据以http协议中post方式发送。
; P" Y. J7 N& Q
; N1 k; \/ h4 z; R. Z; e0 D4 X0 Z* g, d1 a8 U7 D
跟多curlopt对应的设置请查看php文档 http://php.net/manual/zh/book.curl.php
$ F9 H# K0 K2 F& ]: k0 s$ b- y0 o& \+ e
) o {5 n5 K3 I% w3 i特意说明一下curl_setopt_array — 为 cURL 传输会话批量设置选项4 a& Y4 E" \- M& u* z
使用案例为
- t3 A2 a8 x8 Y- ^. w
& Z" `- r& z. v5 n
2 j5 A" e! H: f6 X7 j复制代码. K) Z% C9 q; {5 P7 I- [2 n
% T9 _/ m& p" J* W2 Z2 m4 d: G
1 <?php0 r/ ~+ x, X% F/ ~' j, W. \/ L
2 // 创建一个新cURL资源
: V1 l8 m( C4 i# g- r 3 $ch = curl_init();8 p: [+ Z" T0 _4 Z) w- ?) D: O
4 6 e$ G2 m$ | Y1 s+ R
5 // 设置URL和相应的选项# E8 ^1 v. `/ P3 {& T
6 $options = array(CURLOPT_URL => 'http://www.example.com/',4 j. y0 @' h: R9 S( N; o" ^
7 CURLOPT_HEADER => false3 R4 y; M3 B( @9 `# |3 l
8 );
) p- r6 L, o: o) d 9 - _, Z; n3 ~% V; i6 e/ e% e# I$ n
10 curl_setopt_array($ch, $options);
% R1 m [: s- z; d1 c8 L11 ! Q# B8 F4 _# c
12 // 抓取URL并把它传递给浏览器; j4 W( s0 b! d7 r, B$ w+ y9 \
13 curl_exec($ch);' r9 ^3 v @* `7 o( ^6 X: \
14
* b9 i- G2 q8 f& m( U5 O; B15 // 关闭cURL资源,并且释放系统资源
; L7 [! D8 H2 l# n3 ?16 curl_close($ch);! l( P9 q! c" H: [3 h' a: z
17 ?>
0 D/ k; C1 L4 W" e& `
& H2 ]. V& n0 I7 y% J! M复制代码
; o& V' K6 ~% p1 @' |5 E' w+ i8 [
% x; M( c3 `% B: ~- b5 r. s) ]. }: W
% k2 c, U& r4 c' W. b6 V2 tcurl是很强大的,例如,我们只想把获取到的内容输入到文件,而不是直接输出给浏览器,我们就可以使用CURLOPT_RETURNTRANSFER选项!
x' ~- d% j8 V- {5 z ] x/ H
; {0 i1 q/ j% R) E$ l6 G+ v$ Q
5 u7 `% j; ^ @* Q2 V5 ]: F) s这样在curl执行的时候,就会把页面的内容输出到文件当中,我们就可以完成采集等功能啦!1 _, B* d! G& ? ]4 b
: D; y9 e8 {. i
) T1 P6 s+ U! v5 f9 G
' g- X9 z: p& T. ~# J3 d效率方面,curl的原理是模拟浏览器的操作,它的效率要比file_get_contents()高出四倍以上,试想一下,我们5 n, S4 Z: }* e% {% a
( O/ a; L8 F! C
& O9 Z1 d- g6 e% l ?7 w9 p. Z) R0 y
要采集一个信息量特别庞大的站,运行效率的差别可想而知!
" M' v- l% s. k
+ L$ G u( @* a* G+ M
; q: U. B" s: H I5 x+ a
3 Z- ], x, z* f8 j- O不单单是效率上,稳定忄生上来说,curl也远比file_get_contents()函数要好很多!
6 O. H! S- g3 c& g- ^: X/ n- \$ s7 O+ t6 Z& Y6 P9 D7 n0 a7 M
: Z' a0 }3 j' @$ ] w+ b* J$ [$ k
1 m" D( z: ]$ M5 r" Z0 c1 q资源存放>百度网盘
% W c/ l9 S; `. t, ?" z
) W) ~+ s6 }( L J* r3 u下载地址- K" F; h# M! g- p" o: d
1 ]+ d C+ o$ vVIP会员全站免金币
, u$ k1 x3 j& e+ c9 lIT直通车已为全国各地程序员提供上千G课程资源1 ]) Y- J9 L+ c: q j2 N* Z$ A
如您需要购买本站VIP会员,请点击「开通VIP」享受全站资源免金币无限制下载!4 w6 N; b- E8 E; m
# ^# k, p2 J) |- P5 ]0 w失效反馈
$ ?3 ~. U' d" P9 |9 s1 ~) EIT直通车所有资源都存放在自己注册的百度网盘,失效可修复,确保持续可用3 W+ C" ^7 y9 _" A% u$ v
如您需要的资源链接提示失效,请尽情反馈给我们,将在收到反馈后尽快修复「点击反馈」% @3 }5 S+ Y- G8 S; Z; P( A" R$ d
, J N8 }+ [, l3 T% I- X+ Q- V
获得帮助7 K, ^# \, |; E: d! T# E, P' P, F. D
需要帮助吗?点击网站右侧在线客服,7X12小时在线!& ~& Z: \2 Z" Z
/ b1 O" s' W, \8 L
+ L) [% f. |+ L: ^ |
|