Si të konfiguroni telefonat inteligjentë dhe PC. Portali informativ
  • në shtëpi
  • Programet
  • Duke përdorur curl nga linja e komandës. Ngarkimi i skedarëve në ueb nga linja e komandës

Duke përdorur curl nga linja e komandës. Ngarkimi i skedarëve në ueb nga linja e komandës

c URL është një mjet shumë i dobishëm i linjës së komandës për transferimin e të dhënave në ose nga një server. Curl mbështet protokolle të ndryshme si FILE, HTTP, HTTPS, IMAP, IMAPS, LDAP, DICT, LDAPS, TELNET, FTPS, GOPHER, RTMP, RTSP, SCP, SFTP, POP3, POP3S, SMB, SMBS, SMTP, SMTPS, dhe .

cURL mund të përdoret në mënyra të ndryshme. në mënyra interesante... Me këtë mjet mund të shkarkoni, ngarkoni dhe menaxhoni skedarë, të kontrolloni adresën tuaj të emailit ose madje të përditësoni statusin tuaj në disa faqe interneti. mediat sociale ose kontrolloni motin jashtë. Në këtë artikull, ne do të mbulojmë pesë nga përdorimet më të dobishme dhe themelore të mjetit cURL për këdo.

1. Kontrolloni URL-në

Një nga përdorimet më të zakonshme dhe më të thjeshta të cURL është të printoni vetë komandën dhe më pas URL-në që dëshironi të kontrolloni

Curl https://domain.ru

Kjo komandë do të shfaqë përmbajtjen e url-së në terminalin tuaj

2. Ruani url-në e daljes në një skedar

Faqja e internetit Curl -o https://domain.ru% Totali% i marrë% Xferd Shpejtësia mesatare Koha Koha Koha aktuale Ngarkimi Ngarkimi Totali i shpenzuar Shpejtësia e majtë 100 41793 0 41793 0 0 275k 0 -: -: - -: - : - -: -: - 2.9 milion

Në këtë shembull, dalja do të ruhet në një skedar të quajtur 'website' në drejtorinë aktuale të punës.

3. Ngarkimi i skedarëve me Curl

Ju mund të shkarkoni skedarë duke përdorur Curl duke shtuar opsionin -o në komandë. Përdoret për të ruajtur skedarët në server lokal me emra të njëjtë si në serverin në distancë

Curl -O https://domain.ru/file.zip

Në këtë shembull, arkivi 'file.zip' do të shkarkohet në drejtorinë aktuale të punës.

Ju gjithashtu mund të ngarkoni një skedar me një emër tjetër duke shtuar opsionin -o në cURL.

Curl -o archive.zip https://domain.ru/file.zip

Kështu, arkivi 'file.zip' do të shkarkohet dhe do të ruhet si 'Archive.zip'.

cURL mund të përdoret gjithashtu për të shkarkuar skedarë të shumtë në të njëjtën kohë, siç tregohet në shembullin më poshtë

Curl -O https://domain.ru/file.zip -O https://domain.com/file2.zip

Curl mund të përdoret gjithashtu për të ngarkuar skedarë të sigurt mbi SSH me komandën e mëposhtme

Curl -u përdorues sftp: //server.domain.ru/path/to/file

Ju lutemi vini re se duhet të përdorni shtegun e plotë drejt skedarit që dëshironi të shkarkoni

4. Merrni informacion nga titulli HTTP i faqes së internetit

Ju mund të merrni me lehtësi informacionin e kokës së HTTP nga çdo faqe interneti duke shtuar opsionin -I ('i') në cURL.

Curl -I http://domain.ru HTTP / 1.1 200 OK Data: Die, 16 Tetor 2016 23:37:15 GMT Serveri: Apache / 2.4.23 (Unix) X-Powered-By: PHP / 5.6.24 Lidhja : mbyll Përmbajtja-Lloji: tekst / html; grup karakteresh = UTF-8

5. Qasja në serverin FTP

Për të hyrë në serverin FTP duke përdorur Curl, përdorni komandën e mëposhtme

Curl ftp://ftp.domain.ru --emri i përdoruesit: fjalëkalimi

Curl do të lidhet me serverin FTP dhe do të listojë të gjithë skedarët dhe drejtoritë në drejtorinë kryesore të përdoruesit

Ju mund ta shkarkoni skedarin duke përdorur FTP

Curl ftp://ftp.domain.ru/file.zip --emri i përdoruesit: fjalëkalimi

dhe ngarkoni skedarin në serverin FTP

Curl -T file.zip ftp://ftp.domain.ru/ --emri i përdoruesit: fjalëkalimi

Mund të kontrolloni manualisht faqen Curl për të parë gjithçka opsionet e disponueshme cURL dhe funksionaliteti i tij

Burri kaçurrela

PS. Nëse ju pëlqeu ky postim, ju lutemi ndajeni atë me miqtë tuaj në rrjete sociale duke përdorur butonat më poshtë ose thjesht lini një koment. falë.

Shpesh na duhet të shkarkojmë skedarë të ndryshëm nga interneti, për shembull, skedarë të ekzekutueshëm programet, skedarët e skripteve, arkivat burimore. Por kjo nuk duhet të bëhet gjithmonë përmes një shfletuesi. Në shumë situata, është shumë më e lehtë të kryhen të gjitha veprimet përmes terminalit. Sepse në këtë mënyrë ju mund të automatizoni procesin. Nga ana tjetër, webmasterët duhet të testojnë herë pas here aksesin e faqes në internet, të kontrollojnë titujt e dërguar dhe marrë, dhe më shumë.

Për të zgjidhur probleme dhe detyra të tilla të një rrethi të ngjashëm, mund të përdorni mjetin curl. Kjo ju lejon të zgjidhni një gamë shumë më të gjerë detyrash, duke përfshirë edhe imitimin e veprimeve të përdoruesit në sit. Në këtë artikull, ne do të shikojmë se si të përdorim curl, çfarë është dhe pse është i nevojshëm ky program.

Në fakt, curl është më shumë sesa thjesht një mjet i linjës komanduese për Linux ose Windows. Ky është një grup bibliotekash që zbatojnë funksionalitetin bazë të punës me të Faqet e URL-së dhe transferimin e skedarëve. Biblioteka mbështet protokollet e mëposhtme: FTP, FTPS, HTTP, HTTPS, TFTP, SCP, SFTP, Telnet, DICT, LDAP, si dhe POP3, IMAP dhe SMTP. Është i shkëlqyeshëm për simulimin e veprimeve të përdoruesve në faqe dhe operacione të tjera URL.

Mbështetja e bibliotekës Curl është shtuar në shumë gjuhë të ndryshme programimit dhe platformave. Programi curl është një mbështjellës i pavarur rreth kësaj biblioteke. Është ky mjet në të cilin do të përqendrohemi në këtë artikull.

Komanda Curl

Përpara se të kalojmë në një përshkrim se si mund të përdoret komanda curl linux, le të hedhim një vështrim në vetë programin dhe opsionet e tij kryesore që na duhen. Sintaksa e shërbimeve është shumë e thjeshtë:

Lidhja e opsioneve $ curl

Tani le të shohim opsionet kryesore:

  • -# - shfaq një shirit të thjeshtë progresi gjatë ngarkimit;
  • -0 - përdorni protokollin http 1.0;
  • -1 - përdorni protokollin e enkriptimit tlsv1;
  • -2 - përdorni sslv2;
  • -3 - përdorni sslv3;
  • -4 - përdorni ipv4;
  • -6 - përdorni ipv6;
  • -A- specifikoni USER_AGENT tuaj;
  • -b- ruajeni cookie-n në një skedar;
  • -c- dërgoni një cookie në server nga një skedar;
  • -C- vazhdoni ngarkimin e skedarit nga pika e ndërprerjes ose kompensimi i specifikuar;
  • -m - koha maksimale duke pritur për një përgjigje nga serveri;
  • -d- dërgoni të dhëna duke përdorur metodën POST;
  • -D- ruani kokat e kthyera nga serveri në një skedar;
  • -e- vendosni fushën Referer-uri, tregon se nga cila faqe ka ardhur përdoruesi;
  • -E- përdorni një certifikatë të jashtme SSL;
  • -f- mos shfaq mesazhe gabimi;
  • -F- dërgoni të dhëna në formën e një formulari;
  • -G- nëse ky opsion është i aktivizuar, atëherë të gjitha të dhënat e specifikuara në opsionin -d do të transferohen duke përdorur metodën GET;
  • -H- transferimi i titujve në server;
  • - Unë- merrni vetëm kokën HTTP dhe injoroni të gjithë përmbajtjen e faqes;
  • -j- lexoni dhe dërgoni një cookie nga një skedar;
  • -J- hiqni titullin nga kërkesa;
  • -L- pranoni dhe përpunoni ridrejtimet;
  • -s - shuma maksimale ridrejtimet duke përdorur Vendndodhja;
  • -o- nxjerr përmbajtjen e faqes në një skedar;
  • -O- ruani përmbajtjen në një skedar me emrin e faqes ose skedarit në server;
  • -fq- përdorni një përfaqësues;
  • --proto- tregoni protokollin që do të përdoret;
  • -R- kurseni kohë ndryshimi i fundit skedari i fshirë;
  • -s- shfaq një minimum informacioni për gabimet;
  • -S- shfaq mesazhet e gabimit;
  • -T- ngarkoni skedarin në server;
  • -v- prodhimi më i detajuar;
  • -y - shpejtësi minimale shkarkime;
  • -Y- shpejtësia maksimale e shkarkimit;
  • -z- shkarkoni skedarin vetëm nëse është modifikuar më vonë se koha e specifikuar;
  • -V- shfaq versionin.

Këto nuk janë të gjitha opsionet e curl linux, por këtu janë të gjitha ato themelore që do t'ju duhet të përdorni.

Si të përdor curl?

Ne kemi mbuluar gjithçka që lidhet me teorinë e punës me mjetin curl, tani është koha të kalojmë në praktikë dhe të shqyrtojmë shembuj të komandës curl.

Më së shumti detyrë e shpeshtë- kjo është . Është shumë e lehtë për të shkarkuar skedarin. Për ta bërë këtë, mjafton të kaloni emrin e skedarit ose faqen html te mjeti në parametrat:

curl https://raw.githubusercontent.com/curl/curl/master/README.md

Por këtu ju pret një surprizë, e gjithë përmbajtja e skedarit do të dërgohet në dalje standarde. Për ta shkruar atë në një skedar, përdorni:

curl -o readme.txt https://raw.githubusercontent.com/curl/curl/master/README.md

Dhe nëse dëshironi që skedari që rezulton të emërtohet njësoj si skedari në server, përdorni opsionin -O:

curl -O https://raw.githubusercontent.com/curl/curl/master/README.md

curl - # -C - -O https://cdn.kernel.org/pub/linux/kernel/v4.x/testing/linux-4.11-rc7.tar.xz

Nëse është e nevojshme, mund të shkarkoni disa skedarë me një komandë:

curl -O https://raw.githubusercontent.com/curl/curl/master/README.md -O https://raw.githubusercontent.com/curl/curl/master/README

Një gjë tjetër që mund të jetë e dobishme për administratorin është shkarkimi i skedarit vetëm nëse ai është ndryshuar:

curl -z 21-dhjetor-17 https://raw.githubusercontent.com/curl/curl/master/README.md -O https://raw.githubusercontent.com/curl/curl/master/README

Kufiri i shpejtësisë

Mund ta kufizoni shpejtësinë e shkarkimit në kufirin e kërkuar në mënyrë që të mos mbingarkoni rrjetin me opsionin -Y:

curl --limit-rate 50K -O https://cdn.kernel.org/pub/linux/kernel/v4.x/testing/linux-4.11-rc7.tar.xz

Këtu ju duhet të specifikoni numrin e kilobajt për sekondë që mund të shkarkohen. Ju gjithashtu mund të hiqni lidhjen nëse shpejtësia nuk është e mjaftueshme, për këtë përdorni opsionin -Y:

curl -Y 100 -O https://raw.githubusercontent.com/curl/curl/master/README.md

Transferimi i skedarëve

curl -T login.txt ftp://speedtest.tele2.net/upload/

Ose le të kontrollojmë dërgimin e një skedari përmes HTTP, për këtë ekziston një shërbim i veçantë:

curl -T ~ / login.txt http://posttestserver.com/post.php

Si përgjigje, programi do t'ju tregojë se ku mund ta gjeni skedarin e shkarkuar.

Dërgimi i të dhënave POST

Ju mund të dërgoni jo vetëm skedarë, por edhe çdo të dhënë duke përdorur metodën POST. Më lejoni t'ju kujtoj se kjo metodë përdoret për të paraqitur të dhëna nga forma të ndryshme. Përdorni opsionin -d për të dërguar një kërkesë të tillë. Për testim do të përdorim të njëjtin shërbim:

curl -d "field1 = val & fileld2 = val1" http://posttestserver.com/post.php

Nëse nuk jeni të kënaqur me këtë mundësi paraqitjeje, mund të pretendoni se e keni dorëzuar formularin. Ekziston një opsion -F për këtë:

kaçurrela -F" [email i mbrojtur]; lloji = teksti / i thjeshtë "http://posttestserver.com/post.php

Këtu kalojmë fushën e fjalëkalimit në formë, me llojin Teksti i thjeshtë, ju mund të kaloni disa parametra në të njëjtën mënyrë.

Transmetimi dhe marrja e cookies

Cookies ose Cookies përdoren nga faqet e internetit për të ruajtur informacione të caktuara në anën e përdoruesit. Kjo mund të jetë e nevojshme, për shembull, për vërtetimin. Ju mund të merrni dhe të transmetoni cookie duke përdorur curl. Për të ruajtur Cookies të marra në një skedar, përdorni opsionin -c:

curl -c cookie.txt http://posttestserver.com/post.php

Më pas mund ta dërgoni përsëri kaçurrelin e biskotave:

curl -b cookie.txt http://posttestserver.com/post.php

Kalimi dhe analizimi i titujve

Jo gjithmonë kemi nevojë për përmbajtjen e faqes. Ndonjëherë vetëm titujt mund të jenë me interes. Për të shfaqur vetëm ato ekziston opsioni -I:

curl -I https: // faqe

Dhe opsioni -H lejon ose disa në server, për shembull, mund të dërgoni kokën If-Modified-Since në mënyrë që faqja të kthehet vetëm nëse është ndryshuar:

Autentifikimi i kaçurrelave

Nëse serveri kërkon vërtetimin e një prej llojeve të zakonshme, për shembull, HTTP Basic ose FTP, atëherë curl mund ta përballojë shumë lehtë këtë detyrë. Për të specifikuar të dhënat e vërtetimit, thjesht specifikoni ato të ndara me dy pika në opsionin -u:

curl -u ftpuser: ftppass -T - ftp://ftp.testserver.com/myfile_1.txt

Autentifikimi në serverët HTTP do të funksionojë në të njëjtën mënyrë.

Duke përdorur një përfaqësues

Nëse ju duhet të përdorni një server proxy për të shkarkuar skedarë, atëherë kjo është gjithashtu shumë e lehtë. Mjafton të vendosni adresën e serverit proxy në opsionin -x:

curl -x proxysever.test.com:3128 http://google.co.in

konkluzionet

Në këtë artikull, ne shikuam se si të përdorni curl, pse keni nevojë për këtë mjet dhe veçoritë e tij kryesore. Pavarësisht ngjashmërisë së tyre, ato janë shumë të ndryshme. Komanda curl linux është më shumë për analizimin dhe simulimin e veprimeve të ndryshme në server, ndërsa wget është më i përshtatshëm për shkarkimin e skedarëve dhe zvarritjen e faqeve.

Jeta e një zhvilluesi të internetit është e turbullt nga kompleksiteti. Është veçanërisht zhgënjyese kur burimi i këtyre komplikimeve është i panjohur. A është problem me dërgimin e një kërkese, apo me një përgjigje, apo me një bibliotekë të palëve të treta, apo API-ja e jashtme është me gabime? Ka një mori përshtatjesh të ndryshme që mund ta bëjnë jetën tonë më të lehtë. Këtu janë disa mjete të linjës së komandës që unë personalisht i gjej të paçmueshme.

CURL
cURL është një program për transferimin e të dhënave mbi protokolle të ndryshme, të ngjashme me wget. Dallimi kryesor është se si parazgjedhje wget ruan në një skedar, ndërsa cURL printon në vijën e komandës. Kjo e bën shumë të lehtë shikimin e përmbajtjes së faqes në internet. Për shembull, ja se si të merrni shpejt IP-në tuaj të jashtme aktuale:

$ curl ifconfig.me 93.96.141.93
Opsione -i(tregoni kokat) dhe - Unë(shfaqni vetëm titujt) e bëjnë cURL një mjet të shkëlqyeshëm për korrigjimin e përgjigjeve HTTP dhe analizimin e asaj që saktësisht po ju dërgon serveri:

$ curl -I habrahabr.ru HTTP / 1.1 200 OK Serveri: nginx Data: Thu, 18 Gusht 2011 14:15:36 GMT Lloji i Përmbajtjes: tekst / html; charset = utf-8 Lidhja: keep-alive Keep-alive: timeout = 25
Parametri -L gjithashtu i dobishëm, e bën cURL të ndjekë automatikisht ridrejtimet. cURL mbështet Autentifikimin HTTP, Cookies, tunelimin e proxy HTTP, cilësimet manuale në tituj dhe shumë e shumë më tepër.

Rrethimi
Siege është një mjet testimi i ngarkesës. Plus, ajo ka një opsion të dobishëm -g e cila është shumë e ngjashme me kaçurrela –iL, por gjithashtu ju tregon titujt e kërkesës http. Ja një shembull nga google.com (disa tituj janë hequr për shkurtësi):

$ siege -g www.google.com GET / HTTP / 1.1 Pritësi: www.google.com Agjenti i përdoruesit: JoeDog / 1.00 (X11; I; Siege 2.70) Lidhja: mbyll HTTP / 1.1 302 Vendndodhja e gjetur: http: // www.google.co.uk/ Lloji i përmbajtjes: tekst / html; charset = UTF-8 Server: gws Content-Length: 221 Lidhja: mbyll GET / HTTP / 1.1 Pritësi: www.google.co.uk Përdoruesi-Agjent: JoeDog / 1.00 (X11; I; Siege 2.70) Lidhja: mbyll HTTP / 1.1 200 OK Lloji i përmbajtjes: tekst / html; grup karakteresh = ISO-8859-1 X-XSS-Mbrojtja: 1; mode = bllok Lidhja: mbyll
Por ajo për të cilën Siege është vërtet e mrekullueshme është testimi i ngarkesës. Ashtu si pikë referimi Apache ab, ai mund të dërgojë shumë kërkesa të njëkohshme në sajt dhe të shohë se si e trajton trafikun. Shembulli i mëposhtëm tregon se si ne testojmë Google me 20 pyetje për 30 sekonda, pas së cilës ai nxjerr rezultatin:

$ siege -c20 www.google.co.uk -b -t30s ... Heqja e rrethimit të serverit ... u krye. Transaksionet: 1400 vizita Disponueshmëria: 100,00% Koha e kaluar: 29,22 sekonda Të dhënat e transferuara: 13,32 MB Koha e përgjigjes: 0,41 sekonda Shkalla e transaksionit: 47,91 trans / sek Përfundimi: 0,46 MB / sek 1 transaksione të suksesshme. 4.08 Transaksioni më i shkurtër: 0.08
Një nga veçoritë më të dobishme të Siege është se ai mund të funksionojë jo vetëm me një adresë, por edhe me një listë të URL-ve nga një skedar. Kjo është e shkëlqyeshme për testimin e ngarkesës, sepse ju mund të simuloni trafikun e botës reale në faqen tuaj, në vend që thjesht të goditni të njëjtën URL pa pushim. Për shembull, ja se si të përdorni Siege për të ngarkuar një server duke përdorur adresat nga regjistri juaj Apache:

$ cut -d "" -f7 /var/log/apache2/access.log> urls.txt $ siege -c -b -f urls.txt
Ngrep
Për analiza serioze të trafikut, ekziston Wireshark me mijëra cilësime, filtra dhe konfigurime. Ekziston gjithashtu një version i linjës së komandës peshkaqen... Por për detyra të thjeshta, unë e konsideroj funksionalitetin e Wireshark të tepërt. Pra, për sa kohë që nuk kam nevojë armë e fuqishme, përdor. Kjo ju lejon të bëni të njëjtën gjë me paketat e rrjetit si grep bën me skedarë.

Për trafikun në internet, pothuajse gjithmonë do të dëshironi të përdorni parametrin - W për të ruajtur formatimin e vargut si dhe opsionin -q i cili fsheh informacione të tepërta për paketat e papërshtatshme. Këtu është një shembull i një komande që përgjon të gjitha paketat me një komandë GET ose POST:

Ngrep -q -W rreshti "^ (MERRNI | POST). *"
Ju mund të shtoni një filtër shtesë për paketat, për shembull nga një host të caktuar, adresën IP ose portin. Këtu është një filtër për gjithçka që hyn dhe trafiku dalës në google.com, porta 80, e cila përmban fjalën "kërko".

Ngrep -q -W byline "kërko" host www.google.com dhe porta 80

Ky artikull supozon se jeni njohur me bazat e rrjeteve dhe HTML.

Skripti është thelbësor kur ndërtoni një të mirë sistemi kompjuterik... Zgjerimi i sistemeve Unix me skriptet shell dhe programe të ndryshme që ekzekutojnë komanda të automatizuara është një nga arsyet pse ato janë kaq të suksesshme.

Rritja e numrit të aplikacioneve që po lëvizin në ueb e ka bërë temën e skriptimit HTTP gjithnjë e më të kërkuar. Detyra të rëndësishme në këtë fushë janë marrja automatike e informacionit nga interneti, dërgimi ose shkarkimi i të dhënave në serverët e uebit etj.

Curl është një mjet i linjës së komandës që ju lejon të bëni të gjitha llojet e manipulimeve dhe transferimeve të URL-ve. Ky artikull fokusohet në bërjen e kërkesave të thjeshta HTTP. Supozohet se ju tashmë e dini se ku të shkruani

# curl --ndihmë

# curl --manual

për informacion mbi curl.

Curl nuk është një mjet që do të bëjë gjithçka për ju. Ai krijon kërkesa, merr të dhëna dhe dërgon të dhëna. Ju mund të keni nevojë për një lloj ngjitësi për të bashkuar gjithçka, ndoshta një gjuhë shkrimi (si bash) ose disa thirrje manuale.

1. Protokolli HTTP

HTTP është protokolli i përdorur gjatë marrjes së të dhënave nga serverët në internet. Është një protokoll shumë i thjeshtë që është ndërtuar në krye të TCP/IP. Protokolli gjithashtu lejon që informacioni të dërgohet në server nga një klient duke përdorur disa metoda, siç do të tregohet më poshtë.

HTTP janë vargje të tekstit ASCII të dërguar nga klienti në server për të kërkuar një veprim. Kur merret një kërkesë, serveri i përgjigjet klientit me disa shërbime vargjet e tekstit, dhe më pas përmbajtjen aktuale.

Duke përdorur çelësin curl -v, mund të shihni se çfarë komandash dërgon curl në server, si dhe tekste të tjera informative. Ndërprerësi -v është ndoshta mënyra e vetme për të korrigjuar gabimet apo edhe për të kuptuar ndërveprimin midis curl dhe serverit të uebit.

2. URL

Formati Uniform Resource Locator (URL) specifikon adresën e një burimi specifik në internet. Ju ndoshta e dini këtë, për shembull URL-të: http://curl.haxx.se ose https://yourbank.com.

3. Merrni faqen (GET).

Kërkesa më e thjeshtë dhe më e zakonshme HTTP është marrja e përmbajtjes së URL-së. URL-ja mund të lidhet me një faqe interneti, imazh ose skedar. Klienti dërgon një kërkesë GET në server dhe merr dokumentin e kërkuar. Nëse ekzekutoni komandën

# curl http://curl.haxx.se

ju do të merrni një faqe interneti të shfaqur në dritaren e terminalit tuaj. Dokumenti i plotë HTML që gjendet në këtë URL.

Të gjitha përgjigjet HTTP përmbajnë një grup kokash që zakonisht fshihen. Për t'i parë ato së bashku me vetë dokumentin, përdorni çelësin curl -i. Ju gjithashtu mund të kërkoni vetëm titujt me çelësin -I (i cili do ta bëjë curl të bëjë një kërkesë HEAD).

4. Format

Formularët janë mënyra kryesore e paraqitjes së një faqe interneti si faqe HTML me fusha në të cilat përdoruesi fut të dhënat dhe më pas klikon në butonin "OK" ose "Dërgo", pas së cilës të dhënat dërgohen në server. Pastaj serveri përdor të dhënat e marra dhe vendos se si të vazhdojë: të kërkojë informacion në bazën e të dhënave, të tregojë adresën e futur në një hartë, të shtojë një mesazh gabimi ose të përdorë informacionin për të vërtetuar përdoruesin. Sigurisht, ka një program në anën e serverit që pranon të dhënat tuaja.

4.1 MERRNI

Formulari GET përdor metodën GET, për shembull në mënyrën e mëposhtme:

Nëse e hapni këtë kod në shfletuesin tuaj, do të shihni një formular me kuti teksti dhe një buton të emërtuar "OK". Nëse futni "1905" dhe klikoni OK, shfletuesi do të krijojë një URL të re për t'u ndjekur. URL-ja do të përfaqësohet si një varg që përbëhet nga shtegu i URL-së së mëparshme dhe një varg si "junk.cgi? Birthyear = 1905 & shtyp = OK".

Për shembull, nëse formulari ndodhej në "www.hotmail.com/when/birth.html", atëherë duke klikuar OK do t'ju çoni në URL-në "www.hotmail.com/when/junk.cgi?birthyear=1905&press=OK "...

Shumica Motorë kërkimi punoni në atë mënyrë.

Për ta bërë curl form një kërkesë GET, thjesht shkruani atë që pritet nga formulari:

# curl "www.hotmail.com/when/junk.cgi?birthyear=1905&press=OK"

4.2 POST

Metoda GET bën që të gjitha informacionet e futura të shfaqen në shiritin e adresave të shfletuesit tuaj. Ndoshta kjo është mirë kur ju duhet të shënoni faqen, por është një disavantazh i dukshëm kur shkruani fushat e formularit informacione të klasifikuara ose kur sasia e informacionit të futur në fusha është shumë e madhe (duke rezultuar në një URL të palexueshme).

Protokolli HTTP ofron Metoda POST... Me të, klienti dërgon të dhëna veçmas nga URL-ja dhe për këtë arsye nuk do t'i shihni ato në shiritin e adresave.

Forma që gjeneron kërkesën POST është e ngjashme me atë të mëparshme:

Curl mund të formojë një kërkesë POST me të njëjtat të dhëna si kjo:

# curl -d "viti i lindjes = 1905 & shtyp =% 20OK% 20" www.hotmail.com/when/junk.cgi

Kjo kërkesë POST përdor "Content-Type application / x-www-form-urlencoded", e cila është metoda më e përdorur.

Të dhënat që dërgoni në server duhet të kodohen saktë, curl nuk do ta bëjë këtë për ju. Për shembull, nëse dëshironi që të dhënat tuaja të përmbajnë një hapësirë, duhet ta zëvendësoni atë hapësirë ​​me% 20, etj. Mungesa e vëmendjes për këtë çështje - gabim i zakonshëm, për shkak të së cilës të dhënat nuk transferohen siç duhet.

Në vitin 1995, u përcaktua një mënyrë shtesë për transferimin e të dhënave përmes HTTP. Është e dokumentuar në RFC 1867, kjo është arsyeja pse nganjëherë referohet si postimi RFC1867.

Kjo metodë është krijuar kryesisht për të mbështetur më mirë ngarkimet e skedarëve. Forma që lejon përdoruesin të ngarkojë një skedar duket si kjo në HTML:

Vini re se Content-Type është vendosur në shumëpjesëshe/formë-të dhëna.

Për të dërguar të dhëna në një formë të tillë duke përdorur curl, futni komandën:

# kaçurrela -F [email i mbrojtur]-F shtyp = OK

4.4 Fushat e fshehura

Një mënyrë e zakonshme për të komunikuar informacionin e gjendjes në aplikacionet HTML është përdorimi i fushave të fshehura në forma. Fushat e fshehura nuk janë të mbushura, ato janë të padukshme për përdoruesin dhe kalohen në të njëjtën mënyrë si fushat e rregullta.

Një shembull i thjeshtë i një formulari me një fushë të dukshme, një të fshehur dhe një buton OK:

Për të dërguar një kërkesë POST duke përdorur curl, nuk duhet të mendoni nëse fusha është e fshehur apo jo. Për kaçurrela, ato janë të gjitha të njëjta:

# curl -d "viti i lindjes = 1905 & shtyp = OK & personi = daniel"

4.5 Zbuloni se si duket një kërkesë POST

Kur dëshironi të plotësoni një formular dhe të dërgoni të dhëna në server duke përdorur curl, me siguri dëshironi që kërkesa POST të duket saktësisht e njëjtë me atë të ekzekutuar duke përdorur shfletuesin.

Një mënyrë e thjeshtë për të parë kërkesën tuaj POST është të ruani faqen HTML me formularin në disk, të ndryshoni metodën në GET dhe të klikoni butonin Submit (mund të ndryshoni gjithashtu URL-në në të cilën do të dërgohen të dhënat).

Ju do t'i shihni të dhënat e bashkangjitura në URL, të ndara me karaktere "?", siç pritej kur përdorni formularët GET.

5. VENDOS

Ndoshta mënyra më e mirë për të ngarkuar të dhëna në një server HTTP është përdorimi i PUT. Përsëri, kjo kërkon një program (skript) në anën e pasme që di se çfarë të bëjë dhe si të marrë një transmetim HTTP PUT.

Dërgoni skedarin në server duke përdorur curl:

# curl -T ngarkoni skedar www.uploadhttp.com/receive.cgi

6. Autentifikimi

Autentifikimi - kalimi i emrit të përdoruesit dhe fjalëkalimit në server, më pas ai kontrollon nëse keni të drejtë të bëni kërkesën e kërkuar. Autentifikimi bazë (që curl e përdor si parazgjedhje) është tekst i qartë, që do të thotë se emri i përdoruesit dhe fjalëkalimi nuk do të kodohen, por vetëm pak të errësohen nga Base64, gjë që e lë atë të hapur për sulmuesit në rrugën midis jush dhe serverit HTTP.

Duke i thënë curl-it të përdorë një emër përdoruesi dhe fjalëkalim:

Emri # curl -u: fjalëkalimi www.secrets.com

Faqja mund të kërkojë përdorimin e një metode të ndryshme vërtetimi (shiko çfarë shkruan serveri në titujt), në këto raste mund të përdorni çelësat --ntlm, --digest, --negotiate, apo edhe --anyauth. Ndonjëherë qasja në serverët e jashtëm HTTP bëhet përmes një përfaqësuesi, siç bëhet shpesh në kompani dhe firma. Një përfaqësues HTTP mund të kërkojë emrin e vet të përdoruesit dhe fjalëkalimin për të hyrë në internet. Çelësi i kaçurrelës përkatës:

# curl -U proxyuser: proxypassword curl.haxx.se

Nëse përfaqësuesi kërkon vërtetim NTLM, specifikoni --proxy-ntlm, nëse metodën Digest, atëherë --proxy-digest.

Nëse nuk e specifikoni fjalëkalimin në çelësat -u dhe -U, atëherë curl do t'ju kërkojë atë në modaliteti interaktiv.

Vini re se kur curl po funksionon, linja e nisjes (së bashku me çelësat dhe fjalëkalimet) mund të jetë e dukshme për përdoruesit e tjerë në sistemin tuaj në listën e detyrave. Ka mënyra për ta parandaluar këtë. Më shumë për këtë më poshtë.

7. Referues

Kërkesa HTTP mund të përfshijë një fushë "referues" që tregon se nga cila URL ka ardhur përdoruesi këtë burim... Disa programe/skripta kontrollojnë fushën "referues" dhe nuk e ekzekutojnë kërkesën nëse përdoruesi vjen nga një faqe e panjohur. Edhe pse kjo është një mënyrë e trashë për të kontrolluar, shumë skripta e përdorin atë. Me curl, ju mund të vendosni çdo gjë në fushën "referues" dhe ta bëni atë të bëjë atë që dëshironi.

Kjo bëhet si më poshtë:

# curl -e http://curl.haxx.se daniel.haxx.se

8. Agjenti i përdoruesit

Të gjitha kërkesat HTTP mbështesin fushën "User-Agent", e cila specifikon aplikacionin e klientit të përdoruesit. Shumë aplikacione ueb përdorin këtë informacion për të shfaqur faqen në një mënyrë ose në një tjetër. Programuesit e uebit krijojnë versione të shumta të një faqeje për përdoruesit shfletues të ndryshëm për të përmirësuar pamjen, përdorimi i të ndryshme skriptet javascript, vbscript, etj.

Ndonjëherë mund të zbuloni se curl po kthen një faqe të ndryshme nga ajo që keni parë në shfletuesin tuaj. Në këtë rast, është thjesht e përshtatshme të përdoret fusha "Agjenti i përdoruesit" për të mashtruar serverin edhe një herë.

Disguise curl si Internet Explorer në një makinë Windows 2000:

# curl -A "Mozilla / 4.0 (e pajtueshme; MSIE 5.01; Windows NT 5.0)"

Pse të mos bëheni Netscape 4.73 në një kuti Linux (PIII):

# curl -A "Mozilla / 4.73 (X11; U; Linux 2.2.15 i686)"

9. Ridrejtimet

Në përgjigje të kërkesës suaj, serveri, në vend të vetë faqes, mund të kthejë një tregues se ku duhet të shkojë shfletuesi më pas për të shkuar te faqen e dëshiruar... Kreu që i tregon shfletuesit këtë ridrejtim është "Vendndodhja:".

Si parazgjedhje, curl nuk shkon në vendndodhjen e specifikuar në "Vendndodhja:", por thjesht shfaq faqen si zakonisht. Por ju mund ta drejtoni atë si më poshtë:

# curl -L www.sitethatredirects.com

Nëse jeni duke përdorur curl për kërkesat POST në një sajt që ridrejtohet menjëherë në një faqe tjetër, mund të përdorni me siguri kombinimin -L dhe -d / -F. Curl do të formojë një kërkesë POST për faqen e parë, dhe më pas një kërkesë GET për tjetrën.

10. Biskota

Me cookies, shfletuesit e uebit kontrollojnë gjendjen nga ana e klientit. Cookie është një emër me përmbajtje të bashkangjitur. Serveri, duke dërguar cookie, i tregon klientit rrugën dhe emrin e hostit në të cilin duhet të dërgohen cookies herën tjetër, tregon jetëgjatësinë e cookie-t dhe disa parametra të tjerë.

Kur një klient lidhet me serverin në adresën e specifikuar në cookie-n e pranuar, klienti e dërgon atë cookie te serveri (përveç nëse kohëzgjatja ka skaduar).

Shumë aplikacione dhe serverë përdorin këtë teknikë për të kombinuar shumë kërkesa në një seancë logjike. Që curl të kryejë edhe këtë funksion, ne duhet të jemi në gjendje të ruajmë dhe dërgojmë cookie, ashtu si bëjnë shfletuesit.

Mënyra më e thjeshtë për të dërguar një cookie në server kur një faqe merret duke përdorur curl është të shtoni çelësin e duhur linja e komandës:

# curl -b "emri = Daniel" www.cookiesite.com

Cookies dërgohen si tituj të rregullt HTTP. Kjo i lejon curl-it të ruajë skedarët e skedarëve duke ruajtur titujt. Ruajtja e cookies duke përdorur curl bëhet me komandën:

# curl -D headers_and_cookies www.cookiesite.com

(nga rruga, për të ruajtur cookies është më mirë të përdorni çelësin -c, më shumë për këtë më poshtë).

Curl ka një mbajtës skedari plotësisht funksional, i cili është i dobishëm kur dëshironi të lidheni përsëri me serverin dhe të përdorni skedarët e skedarëve që janë ruajtur herën e fundit (ose janë punuar me dorë). Për të përdorur cookie-t e ruajtura në një skedar, telefononi curl si kjo:

# curl -b ruajtur_cookies_in_file www.cookiesite.com

Motori i kukive curl aktivizohet kur specifikoni çelësin -b. Nëse dëshironi që curl të pranojë vetëm cookie, përdorni -b me një skedar që nuk ekziston. Për shembull, nëse dëshironi që curl të pranojë cookie nga një faqe dhe më pas të ndiqni ridrejtimin (ndoshta duke e kthyer cookie-n që sapo keni pranuar), mund ta quani curl si kjo:

# curl -b nada -L www.cookiesite.com

Curl mund të lexojë dhe të shkruajë skedarë Netscape dhe Mozilla. Është një mënyrë e përshtatshme për të shkëmbyer kuki ndërmjet shfletuesve dhe skripteve të automatizuara. Ndërprerësi -b zbulon automatikisht nëse këtë skedar cookie e shfletuesve të specifikuar dhe e trajton atë në mënyrë të përshtatshme, dhe duke përdorur çelësin -c / - cookie-jar, mund ta detyroni curl të shkruajë një cookie të re kur të përfundojë operacioni:

# curl -b cookies.txt -c newcookies.txt www.cookiesite.com

11. HTTPS

Ka disa mënyra për të siguruar transferimet tuaja HTTP. Protokolli më i njohur për këtë detyrë është HTTPS, ose HTTP mbi SSL. SSL kodon të gjitha të dhënat e dërguara dhe të marra përmes rrjetit, gjë që rrit gjasat që informacioni juaj të mbahet sekret.

Curl mbështet kërkesat për serverët HTTPS falë bibliotekës falas OpenSSL. Kërkesat bëhen në mënyrën e zakonshme:

# curl https://that.secure.server.com

11.1 Certifikatat

Në botën HTTPS, ju përdorni certifikata përveç emrit të përdoruesit dhe fjalëkalimit për vërtetim. Curl mbështet certifikatat nga ana e klientit. Të gjitha certifikatat janë të kyçura me një frazë kalimi që duhet të futni përpara se curl të fillojë të punojë me to. Fraza kryesore mund të specifikohet ose në vijën komanduese ose të futet në mënyrë interaktive. Curl përdor certifikata si kjo:

# curl -E mycert.pem https://that.secure.server.com

Curl gjithashtu verifikon identitetin e serverit duke kontrolluar certifikatën e serverit kundrejt një certifikate të ruajtur në vend. Nëse gjendet një mospërputhje, curl do të refuzojë të lidhet. Për të injoruar vërtetimin, përdorni çelësin -k.

Më shumë informacion mbi certifikatat mund të gjenden në http://curl.haxx.se/docs/sslcerts.html.

12. Titujt e kërkesave arbitrare

Mund t'ju duhet të ndryshoni ose shtoni artikuj kërkesat individuale kaçurrela.

Për shembull, mund ta ndryshoni kërkesën POST në PROPFIND dhe t'i dërgoni të dhënat si "Lloji i përmbajtjes: tekst / xml" (në vend të tipit të zakonshëm të përmbajtjes):

# kaçurrela -d " "-H" Lloji i Përmbajtjes: tekst / xml "-X PROPFIND url.com

Ju mund të hiqni çdo titull duke e specifikuar atë pa përmbajtje. Për shembull, mund të hiqni kokën "Host:", duke e bërë kështu kërkesën "bosh":

# curl -H "Host:" http://mysite.com

Gjithashtu mund të shtoni tituj. Serverit tuaj mund t'i duhet një titull "Desination:":

# curl -H "Destinacioni: http://moo.com/nowhere" http://url.com

13. Debugimi

Ndodh shpesh që një faqe u përgjigjet kërkesave të curl ndryshe nga kërkesat e shfletuesit. Në këtë rast, duhet t'i ngjani sa më shumë kaçurrela shfletuesit:

  • Përdorni çelësin --trace-ascii për të ruajtur një raport të detajuar të kërkesave në mënyrë që më vonë t'i shqyrtoni ato në detaje dhe të kuptoni problemin.
  • Sigurohuni që të kontrolloni për cookies dhe t'i përdorni ato nëse është e nevojshme (lexoni çelësin -b dhe ruani -c)
  • Futni një nga shfletuesit më të fundit të njohur në fushën "agjent përdorues".
  • Plotësoni fushën "referues" siç bën shfletuesi
  • Nëse po përdorni kërkesat POST, sigurohuni që të gjitha fushat të kalohen në të njëjtin rend si shfletuesi (shih më lart, pika 4.5)

Një ndihmës i mirë në këtë detyrë të vështirë është shtojca LiveHTTPHeader për Mozilla / Firefox, e cila ju lejon të shikoni të gjithë titujt që dërgon dhe merr ky shfletues (edhe kur përdorni HTTPS).

Një qasje e nivelit më të ulët është të kapni trafikun HTTP në ueb duke përdorur programe si ethereal ose tcpdump dhe më pas të analizoni se cilët tituj janë marrë dhe dërguar nga shfletuesi (HTTPS e bën këtë qasje joefektive).

RFC 2616 është një lexim i domosdoshëm për këdo që dëshiron të kuptojë protokollin HTTP.

RFC 2396 shpjegon sintaksën për URL-të.

RFC 2109 përcakton se si funksionojnë cookies.

RFC 1867 përcakton formatin e postimit të ngarkimit të skedarit.

http://openssl.planetmirror.com - Faqja kryesore Projekti OpenSSL

http://curl.haxx.se - faqja kryesore e projektit cURL

cURL është një mjet i veçantë për transferimin e skedarëve dhe të dhënave duke përdorur sintaksën e URL-së. Kjo teknologji mbështet shumë protokolle si HTTP, FTP, TELNET dhe shumë të tjera. CURL fillimisht u krijua për të qenë një mjet i linjës së komandës. Për fat të mirë për ne, biblioteka cURL mbështetet nga gjuha e programimit PHP. Në këtë artikull, ne do të shikojmë disa nga veçoritë e avancuara të cURL dhe gjithashtu do të prekim përdorim praktik njohuritë e marra me anë të PHP.

Pse CURL?

Në fakt, ka shumë mënyra alternative marrjen e mostrave të përmbajtjes së faqes në internet. Në shumë raste, kryesisht për shkak të dembelizmit, e kam përdorur php e thjeshtë funksionon në vend të cURL:

$ përmbajtje = file_get_contents ("http://www.nettuts.com"); // ose $ lines = skedar ("http://www.nettuts.com"); // ose readfile ("http://www.nettuts.com");

Sidoqoftë, këto funksione praktikisht nuk kanë fleksibilitet dhe kanë një numër të madh mangësish në drejtim të trajtimit të gabimeve, etj. Përveç kësaj, ka detyra specifike të cilat thjesht nuk mund t'i zgjidhni falë këtyre funksionet standarde: ndërveprimi i kukive, vërtetimi, dorëzimi i formularit, ngarkimet e skedarëve, etj.

cURL është një bibliotekë e fuqishme që mbështet shumë protokolle, opsione dhe oferta të ndryshme informacion i detajuar në lidhje me kërkesat për URL.

Struktura bazë

  • Inicializimi
  • Caktimi i parametrave
  • Ekzekutimi dhe marrja e rezultatit
  • Duke çliruar kujtesën

// 1.initializimi $ ch = curl_init (); // 2. specifikoni parametrat, duke përfshirë url-në curl_setopt ($ ch, CURLOPT_URL, "http://www.nettuts.com"); curl_setopt ($ ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt ($ ch, CURLOPT_HEADER, 0); // 3. merrni HTML si rezultat $ output = curl_exec ($ ch); // 4. mbyll lidhjen curl_close ($ ch);

Hapi # 2 (d.m.th., thirrja e curl_setopt ()) do të diskutohet në këtë artikull shumë më tepër se të gjithë hapat e tjerë, pasi në këtë fazë ndodhin të gjitha gjërat më interesante dhe të dobishme që duhet të dini. Ka një numër të madh të opsione të ndryshme i cili duhet të specifikohet në mënyrë që të mund të konfiguroni kërkesën për URL në mënyrën më të kujdesshme. Ne nuk do ta konsiderojmë të gjithë listën si një e tërë, por do të fokusohemi vetëm në atë që mendoj se është e nevojshme dhe e dobishme për këtë mësim. Pjesën tjetër mund ta studioni vetë nëse kjo temë ju intereson.

Kontrollimi i gabimeve

Përveç kësaj, ju gjithashtu mund të përdorni deklarata të kushtëzuara për të provuar suksesin:

// ... $ output = curl_exec ($ ch); nëse ($ output === FALSE) (jehonë "CURL Error:". curl_error ($ ch);) // ...

Këtu, ju lutemi vini re një pikë shumë të rëndësishme për veten tuaj: ne duhet të përdorim "=== false" për krahasim, në vend të "== false". Për ata që nuk janë në dijeni, kjo do të na ndihmojë të dallojmë një rezultat të zbrazët nga një vlerë false boolean, e cila do të tregojë një gabim.

Marrja e informacionit

Një hap tjetër shtesë është marrja e të dhënave të kërkesës cURL pasi ato të jenë ekzekutuar.

// ... curl_exec ($ ch); $ info = curl_getinfo ($ ch); jehonë "Marrë". $ info ["total_time"]. "sekonda për url". $ info ["url"]; //...

Vargu i kthyer përmban informacionin e mëposhtëm:

  • "URL"
  • "Lloji_përmbajtje"
  • "Http_code"
  • "Madhësia_Header"
  • "Kërkesë_madhësia"
  • "Koha e skedarit"
  • Ssl_verify_rezult
  • "Redirect_count"
  • "Koha_gjithsej"
  • "Namelookup_time"
  • "Connect_time"
  • "Koha_paratransferimit"
  • "Size_load"
  • Madhësia_shkarkimi
  • "Shkarkim_shpejtësie"
  • "Ngarkimi_Speed"
  • "Shkarkimi_gjatësia_përmbajtjes"
  • "Ngarko_përmbajtjen_gjatësi"
  • "Starttransfer_time"
  • "Redirect_time"

Zbulimi i ridrejtuar bazuar në shfletuesin

Në këtë shembull të parë, ne do të shkruajmë kodin që mund të zbulojë ridrejtimet e URL-ve bazuar në cilësime të ndryshme shfletuesi. Për shembull, disa faqe interneti ridrejtojnë shfletuesit celular, ose ndonjë pajisje tjetër.

Ne do të përdorim opsionin CURLOPT_HTTPHEADER për të përcaktuar titujt tanë HTTP në dalje, duke përfshirë emrin e shfletuesit të përdoruesit dhe gjuhët e disponueshme... Në fund të fundit, ne do të jemi në gjendje të përcaktojmë se cilat sajte po na ridrejtojnë në URL të ndryshme.

// testoni URL-në $ urls = grup ("http://www.cnn.com", "http://www.mozilla.com", "http://www.facebook.com"); // testimi i shfletuesve $ browsers = grup ("standard" => grup ("user_agent" => "Mozilla / 5.0 (Windows; U; Windows NT 6.1; en-US; rv: 1.9.1.6) Gecko / 20091201 Firefox / 3.5 .6 (.NET CLR 3.5.30729) "," gjuha "=>" en-us, en; q = 0.5 ")," iphone "=> grup (" user_agent "=>" Mozilla / 5.0 (iPhone; U ; CPU si Mac OS X; en) AppleWebKit / 420 + (KHTML, si Gecko) Version / 3.0 Mobile / 1A537a Safari / 419.3 "," gjuha "=>" en ")," frëngjisht "=> grup (" user_agent " => "Mozilla / 4.0 (i pajtueshëm; MSIE 7.0; Windows NT 5.1; GTB6; .NET CLR 2.0.50727)", "gjuhë" => "fr, fr-FR; q = 0.5")); foreach ($ urls si $ url) (jehonë "URL: $ url \ n"; foreach ($ shfletues si $ test_name => $ shfletues) ($ ch = curl_init (); // specifikoni url-në curl_setopt ($ ch, CURLOPT_URL, $ url); // vendos titujt për shfletuesin curl_setopt ($ ch, CURLOPT_HTTPHEADER, grup ("Agjenti i përdoruesit: ($ shfletuesi [" user_agent "]), "Prano-Gjuha: ($ shfletuesi [" gjuha "]) " )); // nuk kemi nevojë për përmbajtjen e faqes curl_setopt ($ ch, CURLOPT_NOBODY, 1); // duhet të marrim titujt HTTP curl_setopt ($ ch, CURLOPT_HEADER, 1); // kthejmë rezultatet në vend të daljes curl_setopt ($ ch, CURLOPT_RETURNTRANSFER, 1); $ output = curl_exec ($ ch); curl_close ($ ch); // a kishte një ridrejtim HTTP? Nëse (preg_match ("! Vendndodhja: (. *)!", $ Output , $ matches)) (echo " $ test_name: ridrejton te $ matches \ n ";) tjetër (echo" $ test_name: pa ridrejtim \ n ";)) jehonë" \ n \ n ";)

Së pari, ne ofrojmë një listë të URL-ve të faqes që do të kontrollojmë. Më saktësisht, na duhen adresat e këtyre faqeve. Më pas, duhet të përcaktojmë cilësimet e shfletuesit për të testuar secilën prej këtyre URL-ve. Pas kësaj, ne do të përdorim një lak në të cilin do të kalojmë mbi të gjitha rezultatet e marra.

Truku që përdorim në këtë shembull për të vendosur cilësimet e cURL do të na lejojë të marrim jo përmbajtjen e faqes, por vetëm titujt HTTP (të ruajtura në daljen $). Më pas, duke përdorur një regex të thjeshtë, mund të përcaktojmë nëse linja "Vendndodhja:" ishte e pranishme në titujt e marrë.

Kur vraponi kodi i dhënë, duhet të merrni diçka si më poshtë:

Bërja e një kërkese POST në një URL specifike

Gjatë formimit GET kërkesë të dhënat e transmetuara mund t'i kalojnë URL-së nëpërmjet një "vargu pyetës". Për shembull, kur bëni një kërkim në Google, termi i kërkimit shfaqet në shiritin e adresave të URL-së së re:

Http://www.google.com/search?q=ruseller

Ju nuk keni nevojë të përdorni cURL për të simuluar këtë kërkesë. Nëse dembelizmi ju merr plotësisht, përdorni funksionin file_get_contents () për të marrë rezultatin.

Por çështja është se disa forma HTML dërgojnë kërkesa POST. Të dhënat e këtyre formularëve transportohen përmes trupit të kërkesës HTTP, dhe jo si në rastin e mëparshëm. Për shembull, nëse keni plotësuar një formular në forum dhe keni klikuar në butonin e kërkimit, atëherë me shumë mundësi do të bëhet një kërkesë POST:

Http://codeigniter.com/forums/do_search/

Ne mund të shkruajmë një skript PHP që mund të imitojë këtë lloj kërkese URL. Së pari, le të krijojmë një skedar të thjeshtë për të pranuar dhe shfaqur të dhënat POST. Le ta quajmë post_output.php:

Print_r ($ _ POST);

Pastaj krijojmë një skript PHP për të ekzekutuar kërkesën cURL:

$ url = "http: //localhost/post_output.php"; $ post_data = grup ("foo" => "bar", "query" => "Nettuts", "action" => "Dorëzo"); $ ch = curl_init (); curl_setopt ($ ch, CURLOPT_URL, $ url); curl_setopt ($ ch, CURLOPT_RETURNTRANSFER, 1); // tregoni se kemi një kërkesë POST curl_setopt ($ ch, CURLOPT_POST, 1); // shtoni variabla curl_setopt ($ ch, CURLOPT_POSTFIELDS, $ post_data); $ output = curl_exec ($ ch); curl_close ($ ch); jehonë $ dalje;

Kur ekzekutoni këtë skript, duhet të merrni një rezultat të ngjashëm:

Kështu, kërkesa POST u dërgua në skriptin post_output.php, i cili nga ana e tij prodhoi grupin superglobal $ _POST, përmbajtjen e të cilit e morëm duke përdorur cURL.

Ngarkimi i skedarit

Së pari, le të krijojmë një skedar për të gjeneruar dhe dërguar në upload_output.php:

Print_r ($ _ FILES);

Dhe këtu është kodi i skriptit që kryen funksionalitetin e mësipërm:

$ url = "http: //localhost/upload_output.php"; $ post_data = grup ("foo" => "bar", // skedari që do të ngarkohet "upload" => "@C: /wamp/www/test.zip"); $ ch = curl_init (); curl_setopt ($ ch, CURLOPT_URL, $ url); curl_setopt ($ ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt ($ ch, CURLOPT_POST, 1); curl_setopt ($ ch, CURLOPT_POSTFIELDS, $ post_data); $ output = curl_exec ($ ch); curl_close ($ ch); jehonë $ dalje;

Kur dëshironi të ngarkoni një skedar, gjithçka që duhet të bëni është ta kaloni atë si një variabël të rregullt postimi, të paraprirë nga simboli @. Kur ekzekutoni skriptin që keni shkruar, do të merrni daljen e mëposhtme:

CURL e shumëfishtë

Një nga më pikat e forta cURL është aftësia për të krijuar "shumë" mbajtës të cURL. Kjo ju lejon të hapni një lidhje me URL të shumta në të njëjtën kohë dhe në mënyrë asinkrone.

Në versionin klasik të kërkesës cURL, ekzekutimi i skriptit ndërpritet dhe pritet të përfundojë operacioni i URL-së së kërkesës, pas së cilës skripti mund të vazhdojë. Nëse keni ndërmend të ndërveproni me një grup të tërë URL-sh, do t'ju marrë shumë kohë, pasi në versionin klasik mund të punoni vetëm me një URL në të njëjtën kohë. Megjithatë, ne mund ta rregullojmë këtë situatë duke përdorur mbajtës të veçantë.

Le të hedhim një vështrim në një shembull të kodit që mora nga php.net:

// krijoni disa burime cURL $ ch1 = curl_init (); $ ch2 = curl_init (); // specifikoni URL-në dhe parametrat e tjerë curl_setopt ($ ch1, CURLOPT_URL, "http://lxr.php.net/"); curl_setopt ($ ch1, CURLOPT_HEADER, 0); curl_setopt ($ ch2, CURLOPT_URL, "http://www.php.net/"); curl_setopt ($ ch2, CURLOPT_HEADER, 0); // krijoni mbajtës të shumëfishtë cURL $ mh = curl_multi_init (); // shtoni disa mbajtës curl_multi_add_handle ($ mh, $ ch1); curl_multi_add_handle ($ mh, $ ch2); $ aktiv = null; // ekzekutimi do ($ mrc = curl_multi_exec ($ mh, $ aktiv);) ndërsa ($ mrc == CURLM_CALL_MULTI_PERFORM); ndërsa ($ aktiv && $ mrc == CURLM_OK) (nëse (curl_multi_select ($ mh)! = -1) (bëni ($ mrc = curl_multi_exec ($ mh, $ aktiv);) ndërsa ($ mrc == CURLM_CALL_MULTI_PERFORM);) ) // mbyllja e curl_multi_remove_handle ($ mh, $ ch1); curl_multi_remove_handle ($ mh, $ ch2); curl_multi_close ($ mh);

Ideja është që ju mund të përdorni mbajtës të shumëfishtë cURL. Duke përdorur një lak të thjeshtë, mund të mbani gjurmët se cilat kërkesa nuk janë përfunduar ende.

Ekzistojnë dy unaza kryesore në këtë shembull. Së pari lak do-while thërret funksionin curl_multi_exec (). Ky funksion nuk është i bllokueshëm. Ai funksionon aq shpejt sa mundet dhe kthen statusin e kërkesës. Për sa kohë që vlera e kthyer është konstantja 'CURLM_CALL_MULTI_PERFORM', kjo do të thotë që puna nuk ka përfunduar ende (për shembull, për momentin, titujt http po dërgohen në URL); Kjo është arsyeja pse ne vazhdojmë të kontrollojmë këtë vlerë të kthimit derisa të marrim një rezultat tjetër.

Në ciklin tjetër kontrollojmë gjendjen ndërsa ndryshorja $ active = "true". Është parametri i dytë për funksionin curl_multi_exec (). Vlera e kësaj ndryshore do të jetë e barabartë me "true", përderisa ndonjë nga ndryshimet ekzistueseështë aktiv. Më pas, ne e quajmë funksionin curl_multi_select (). Ekzekutimi i tij është “bllokuar” përderisa ka të paktën një lidhje aktive derisa të merret një përgjigje. Kur kjo të ndodhë, ne kthehemi në ciklin kryesor për të vazhduar ekzekutimin e pyetjeve.

Tani le të zbatojmë njohuritë e marra me një shembull që do të jetë vërtet i dobishëm një numër i madh të njerëzve.

Kontrollimi i lidhjeve në WordPress

Imagjinoni një blog me një numër të madh postimesh dhe postimesh, secila prej të cilave ka lidhje me burimet e jashtme të Internetit. Disa nga këto lidhje mund të jenë tashmë "të vdekura" për arsye të ndryshme. Faqja mund të jetë hequr ose faqja mund të mos funksionojë fare.

Ne do të krijojmë një skript që do të analizojë të gjitha lidhjet dhe do të gjejë faqe interneti që nuk ngarkohen dhe 404 faqe, dhe më pas do të na ofrojë një raport të detajuar.

Duhet të them menjëherë se ky nuk është një shembull i krijimit të një shtojce për WordPress. Ky është vetëm një terren i mirë testimi për testet tona.

Le të fillojmë më në fund. Së pari, ne duhet të marrim të gjitha lidhjet nga baza e të dhënave:

// konfigurimi $ db_host = "localhost"; $ db_user = "rrënjë"; $ db_pass = ""; $ db_name = "wordpress"; $ excluded_domains = grup ("localhost", "www.mydomain.com"); $ max_lidhjet = 10; // inicializoj variablat $ url_list = array (); $work_urls = grup (); $ dead_urls = grup (); $ not_found_urls = grup (); $ aktiv = null; // lidheni me MySQL nëse (! mysql_connect ($ db_host, $ db_user, $ db_pass)) (vdes ("Nuk mund të lidhej:". mysql_error ());) nëse (! mysql_select_db ($ db_name)) (die ("Mund të mos zgjidhni db: ". mysql_error ());) // zgjidhni të gjitha postimet e publikuara me lidhje $ q =" ZGJIDH post_content FROM wp_posts WHERE post_content LIKE "% href =%" AND post_status = "publish" AND post_type = "post "" ; $ r = mysql_query ($ q) ose die (mysql_error ()); ndërsa ($ d = mysql_fetch_assoc ($ r)) (// marr lidhje duke përdorur shprehje të rregullta nëse (preg_match_all ("! href = \" (. *?) \ "!", $ d ["post_content"], $ përputhet) ) (foreach ($ përputhet si $ url) ($ tmp = parse_url ($ url); nëse (in_array ($ tmp ["host"], $ excluded_domains)) (vazhdim;) $ url_list = $ url;)) ) / / hiqni dublikatat $ url_list = array_values ​​(array_unique ($ url_list)); if (! $ url_list) (die ("Nuk ka URL për të kontrolluar");)

Së pari, ne gjenerojmë të dhëna konfigurimi për ndërveprim me bazën e të dhënave, më pas shkruajmë një listë të domeneve që nuk do të marrin pjesë në kontroll ($ excluded_domains). Ne gjithashtu përcaktojmë një numër që karakterizon numrin e maksimumit lidhjet e njëkohshme të cilin do ta përdorim në skriptin tonë ($ max_connections). Më pas i bashkojmë bazës së të dhënave, zgjedhim postimet që përmbajnë lidhje dhe i ruajmë në një grup ($ url_list).

Kodi i mëposhtëm është pak i ndërlikuar, kështu që kuptoni atë nga fillimi në fund:

// 1.përpunues i shumëfishtë $ mh = curl_multi_init (); // 2. shtoni një grup URL-sh për ($ i = 0; $ i< $max_connections; $i++) { add_url_to_multi_handle($mh, $url_list); } // 3. инициализация выполнения do { $mrc = curl_multi_exec($mh, $active); } while ($mrc == CURLM_CALL_MULTI_PERFORM); // 4. основной цикл while ($active && $mrc == CURLM_OK) { // 5. если всё прошло успешно if (curl_multi_select($mh) != -1) { // 6. делаем дело do { $mrc = curl_multi_exec($mh, $active); } while ($mrc == CURLM_CALL_MULTI_PERFORM); // 7. если есть инфа? if ($mhinfo = curl_multi_info_read($mh)) { // это значит, что запрос завершился // 8. извлекаем инфу $chinfo = curl_getinfo($mhinfo["handle"]); // 9. мёртвая ссылка? if (!$chinfo["http_code"]) { $dead_urls = $chinfo["url"]; // 10. 404? } else if ($chinfo["http_code"] == 404) { $not_found_urls = $chinfo["url"]; // 11. рабочая } else { $working_urls = $chinfo["url"]; } // 12. чистим за собой curl_multi_remove_handle($mh, $mhinfo["handle"]); // в случае зацикливания, закомментируйте данный вызов curl_close($mhinfo["handle"]); // 13. добавляем новый url и продолжаем работу if (add_url_to_multi_handle($mh, $url_list)) { do { $mrc = curl_multi_exec($mh, $active); } while ($mrc == CURLM_CALL_MULTI_PERFORM); } } } } // 14. завершение curl_multi_close($mh); echo "==Dead URLs==\n"; echo implode("\n",$dead_urls) . "\n\n"; echo "==404 URLs==\n"; echo implode("\n",$not_found_urls) . "\n\n"; echo "==Working URLs==\n"; echo implode("\n",$working_urls); function add_url_to_multi_handle($mh, $url_list) { static $index = 0; // если у нас есть ещё url, которые нужно достать if ($url_list[$index]) { // новый curl обработчик $ch = curl_init(); // указываем url curl_setopt($ch, CURLOPT_URL, $url_list[$index]); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_NOBODY, 1); curl_multi_add_handle($mh, $ch); // переходим на следующий url $index++; return true; } else { // добавление новых URL завершено return false; } }

Këtu do të përpiqem të vendos gjithçka në raftet. Numrat në listë korrespondojnë me numrat në koment.

  1. 1. Krijo një mbajtës të shumëfishtë;
  2. 2. Funksionin add_url_to_multi_handle () do ta shkruajmë pak më vonë. Sa herë që thirret, do të fillojë të përpunojë një url të ri. Fillimisht, ne shtojmë 10 ($ max_connections) URL;
  3. 3. Për të filluar, duhet të ekzekutojmë funksionin curl_multi_exec (). Për sa kohë që kthen CURLM_CALL_MULTI_PERFORM, kemi ende shumë për të bërë. Kjo na duhet kryesisht për të krijuar lidhje;
  4. 4. Më pas vjen cikli kryesor, i cili do të funksionojë për sa kohë të kemi të paktën një lidhje aktive;
  5. 5. curl_multi_select () varet duke pritur që kërkimi i URL-së të përfundojë;
  6. 6. Përsëri, ne duhet të bëjmë cURL të bëjë disa punë, domethënë të marr të dhënat e përgjigjes së kthyer;
  7. 7. Këtu kontrollohet informacioni. Si rezultat i ekzekutimit të kërkesës, një grup do të kthehet;
  8. 8. Vargu i kthyer përmban një mbajtës cURL. Ne do ta përdorim atë për të marrë informacion në lidhje me një kërkesë individuale të cURL;
  9. 9. Nëse lidhja ishte e vdekur, ose koha e ekzekutimit të skenarit ka skaduar, atëherë nuk duhet të kërkojmë ndonjë kodi http a;
  10. 10. Nëse lidhja na kthen një faqe 404, atëherë kodi http do të përmbajë vlerën 404;
  11. 11. Përndryshe, ne kemi një hallkë pune para nesh. (Mund të shtoni kontrolle shtesë për kodin e gabimit 500, etj ...);
  12. 12. Më pas, heqim mbajtësin cURL sepse nuk na nevojitet më;
  13. 13. Tani mund të shtojmë një url tjetër dhe të ekzekutojmë gjithçka për të cilën folëm më parë;
  14. 14. Në këtë hap, skenari përfundon punën e tij. Ne mund të fshijmë gjithçka që nuk na nevojitet dhe të krijojmë një raport;
  15. 15. Së fundi, do të shkruajmë një funksion që do të shtojë url-në në mbajtës. Indeksi i ndryshores statike $ do të rritet çdo herë këtë funksion do të thirret.

E përdora këtë skript në blogun tim (me disa lidhje të prishura që i shtova qëllimisht për ta testuar) dhe mora rezultatin e mëposhtëm:

Në rastin tim, skenarit iu deshën pak më pak se 2 sekonda për të kaluar nëpër 40 URL. Rritja e produktivitetit është e rëndësishme kur punoni me më shumë sasi e madhe Adresat URL. Nëse hapni dhjetë lidhje në të njëjtën kohë, skripti mund të funksionojë dhjetë herë më shpejt.

Disa fjalë për opsionet e tjera të dobishme të cURL

Autentifikimi HTTP

Nëse në Adresa URL ka vërtetim HTTP, atëherë mund të përdorni lehtësisht skriptin e mëposhtëm:

$ url = "http://www.somesite.com/members/"; $ ch = curl_init (); curl_setopt ($ ch, CURLOPT_URL, $ url); curl_setopt ($ ch, CURLOPT_RETURNTRANSFER, 1); // specifikoni emrin dhe fjalëkalimin curl_setopt ($ ch, CURLOPT_USERPWD, "emri i përdoruesit: fjalëkalimi im"); // nëse ridrejtimi lejohet curl_setopt ($ ch, CURLOPT_FOLLOWLOCATION, 1); // pastaj ruani të dhënat tona në cURL curl_setopt ($ ch, CURLOPT_UNRESTRICTED_AUTH, 1); $ output = curl_exec ($ ch); curl_close ($ ch);

Ngarkimi FTP

PHP gjithashtu ka një bibliotekë për të punuar me FTP, por asgjë nuk ju pengon të përdorni mjetet cURL:

// hap skedarin $ file = fopen ("/ rruga / te / skedari", "r"); // url duhet të përmbajë përmbajtjen e mëposhtme $ url = "ftp: // emri i përdoruesit: [email i mbrojtur]: 21 / shteg / te / i ri / skedar "; $ ch = curl_init (); curl_setopt ($ ch, CURLOPT_URL, $ url); curl_setopt ($ ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt ($ ch, CURLOPT_UPl_topt, $ ch, CURLOPT_INFILE, $ fp); curl_setopt ($ ch, CURLOPT_INFILESIZE, madhësia e skedarit ("/ shtegu / te / skedari")); // specifikoni modalitetin ASCII curl_setopt ($ ch, CURLOPT_FTPASCII, 1); prodhimi i kthesës = curl ( $ ch);curl_close ($ ch);

Duke përdorur Proxies

Ju mund të ekzekutoni kërkesën tuaj për url përmes një përfaqësuesi:

$ ch = curl_init (); curl_setopt ($ ch, CURLOPT_URL, "http://www.example.com"); curl_setopt ($ ch, CURLOPT_RETURNTRANSFER, 1); // specifikoni adresën curl_setopt ($ ch, CURLOPT_PROXY, "11.11.11.11:8080"); // nëse duhet të jepni një emër përdoruesi dhe fjalëkalim curl_setopt ($ ch, CURLOPT_PROXYUSERPWD, "user: pass"); $ output = curl_exec ($ ch); curl_close ($ ch);

Funksionet e kthimit të thirrjes

Është gjithashtu e mundur të specifikohet një funksion që do të aktivizohet edhe para se të përfundojë kërkesa cURL. Për shembull, ndërsa përmbajtja e përgjigjes po ngarkohet, mund të filloni të përdorni të dhënat pa pritur që ato të ngarkohen plotësisht.

$ ch = curl_init (); curl_setopt ($ ch, CURLOPT_URL, "http://net.tutsplus.com"); curl_setopt ($ ch, CURLOPT_WRITEFUNCTION, "progress_function"); curl_exec ($ ch); curl_close ($ ch); funksioni progres_funksioni ($ ch, $ str) (echo $ str; ktheje strlen ($ str);)

Një funksion si ky DUHET të kthejë gjatësinë e një vargu, i cili është i detyrueshëm.

konkluzioni

Sot ne shikuam se si mund ta përdorni bibliotekën cURL në tuajën tuaj qëllime egoiste... Shpresoj se ju ka pëlqyer ky artikull.

Faleminderit! Paçi një ditë të mbarë!

Artikujt kryesorë të lidhur