PHP CURL - funksiyalar və istifadə nümunələri. Curl_setopt - Komanda xəttindən curl istifadə edərək CURL seansı üçün seçimi təyin edir




CURL, URL sintaksisindən istifadə edərək məlumatların ötürülməsi üçün əmr satırı yardım proqramı və kitabxanadan ibarət proqram paketidir.

CURL DICT, FILE, FTP, FTPS, Gopher, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMTP, SMTPS, Telnet və TFTP daxil olmaqla bir çox protokolları dəstəkləyir.

Ayrı bir fayl yükləyin
Aşağıdakı əmr URL-in məzmununu alacaq və onu standart çıxışda (yəni terminalınızda) göstərəcək.

Curl https://mi-al.ru/ > mi-al.htm % Toplam % Qəbul % Xferd Orta Sürət Vaxt Vaxt Vaxt Cari Yükləmə Yükləmə Cəmi Xərclənmiş Sol Sürət 100 14378 0 14378 0 0 5387 0 --: --:- - 0:00:02 --:--:-- 5387

cURL çıxışının faylda saxlanması
Curl əmrinin nəticəsini -o/-O seçimlərindən istifadə edərək faylda saxlaya bilərik.
  • -o(o kiçik hərflə) nəticə komanda xəttində göstərilən faylda saxlanılacaq
  • -O(böyük hərf O) fayl adı URL-dən götürüləcək və qəbul edilmiş məlumatları saxlamaq üçün istifadə olunacaq.

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

Gettext.html səhifəsi indi 'mygettext.html' adlı faylda saxlanacaq. Curl -o seçimi ilə işlədildikdə, yükləmə tərəqqi çubuğunu aşağıdakı kimi göstərir.

% Toplam % Qəbul % Xferd Orta Sürət Vaxt Vaxt Vaxt Cari Yükləmə Yükləmə Cəmi Xərclənmiş Sol Sürət 66 1215k 66 805k 0 0 33060 0 0:00:37 0:00:24 0:00:13 45900 15012 012 0 0 39474 0 0:00:31 0:00:31 --:--:-- 68987

Siz curl -O (böyük hərf O) istifadə etdiyiniz zaman o, məzmunu yerli maşında ‘gettext.html’ adlı faylda saxlayacaq.

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

Qeyd: Curl terminala məlumat yazmaq lazım olduqda, çap edilmiş məlumatlarla çaşqınlığın qarşısını almaq üçün tərəqqi çubuğunu söndürür. Nəticələri fayla köçürmək üçün '>'|'-o'|'-O' seçimlərindən istifadə edə bilərik.

Birdən çox faylın alınması
Komanda xəttində bütün URL-ləri göstərərək birdən çox faylı yükləyə bilərik.

Curl -O URL1 -O URL2

Aşağıdakı əmr həm index.html, həm də gettext.html fayllarını endirəcək və onları eyni adlarla cari kataloqda saxlayacaqdır.

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

Nəzərə alın ki, yuxarıda göstərildiyi kimi eyni serverdən birdən çox fayl endirdikdə, curl əlaqəni yenidən istifadə etməyə çalışacaq.

-L seçimi ilə HTTP Yer başlıqlarını izləyin
Varsayılan olaraq, CURL başlıqlarda (yönləndirmələrdə) HTTP Yerinə əməl etmir. Tələb olunan veb səhifə başqa yerə köçürüldükdə, müvafiq cavab HTTP Yer başlıqlarında göndəriləcək.
Məsələn, kimsə öz ölkəsindən brauzerinə google.com ünvanını yazdıqda, o, avtomatik olaraq "google.co.xx" saytına yönləndiriləcək. Bu, aşağıda göstərildiyi kimi HTTP Yer başlığı əsasında edilir.

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

302 köçürüldü

302 köçürüldü

Sənəd bura köçürülüb.

Yuxarıdakı çıxışda tələb olunan sənədin '

Qonaqlardan gizlədilib

.
Siz curl-a yönləndirmələri izləməyi söyləyə bilərsiniz, bu, aşağıda göstərildiyi kimi -L seçimindən istifadə etməklə edilir. İndi html mənbə kodu buradan endiriləcək

Qonaqlardan gizlədilib

.

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

Əvvəlki endirmənin yenilənməsi

-C seçimindən istifadə edərək nədənsə dayandırılmış yükləməni davam etdirə bilərsiniz. Böyük faylları yükləmək uğursuz olduqda bu faydalı olacaq.
'-C -' desək, curl yükləməni haradan davam etdirəcəyini axtaracaq. Biz həmçinin '-C-ni təyin edə bilərik<смещение>'. Göstərilən bayt ofseti mənbə faylının əvvəlindən atlanacaq.
Curl ilə böyük yükləməyə başlayın və yükləmənin ortasında dayandırmaq üçün Ctrl-C düymələrini basın.

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

Enjeksiyon 20,1% -də dayandırıldı. “curl -C -” istifadə edərək, qaldığımız yerdən yükləməyə davam edə bilərik. İndi yükləmə 20,1%-dən davam edəcək.

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

Məlumat sürəti limiti
Siz məlumat ötürmə sürətini –limit-rate seçimi ilə məhdudlaşdıra bilərsiniz. Arqument olaraq maksimum sürəti ötürə bilərsiniz.

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

Yuxarıdakı əmr ötürmə sürətini 1000 bayt/saniyə ilə məhdudlaşdıracaq. curl zirvələrdə daha yüksək sürətlərdən istifadə edə bilər. Lakin orta sürət təxminən 1000 bayt/saniyə olacaq.
Aşağıda yuxarıdakı əmr üçün irəliləyiş çubuğu var. Cari sürətin təxminən 1000 bayt olduğunu görə bilərsiniz.

% Toplam % Qəbul edilmiş % Xferd Orta Sürət Vaxt Vaxt Vaxt Cari Yükləmə Yükləmə Toplam Xərclənmiş Sol Sürət 1 1215k 1 13601 0 0 957 0 0:21:40 0:00:14 0:21:26 999 1 1214600 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

Faylı yalnız müəyyən vaxtdan əvvəl/sonra dəyişdirilmişsə yükləyin
Curl-da -z seçimindən istifadə edərək müəyyən vaxtdan sonra dəyişmiş faylları əldə edə bilərsiniz. Bu həm FTP, həm də HTTP üçün işləyəcək.

Yuxarıdakı əmr yy.html faylını yalnız verilən tarix və vaxtdan daha yaxın vaxtlarda dəyişdirilmişsə yükləyəcək.

Göstərilən tarix və vaxtdan əvvəl dəyişdirilmişsə, yuxarıdakı əmr file.html faylını yükləyəcək. Tarix ifadələri üçün dəstəklənən müxtəlif sintaksislər haqqında ətraflı öyrənmək üçün 'man curl_getdate' yazın.

cURL-də HTTP autentifikasiyası keçir
Bəzən vebsaytlar məzmununa baxmaq üçün istifadəçi adı və parol tələb edir. -u seçimindən istifadə edərək, aşağıda göstərildiyi kimi bu etimadnamələri cURL-dən veb serverə ötürə bilərsiniz.

$ curl -u istifadəçi adı:parol URL

Qeyd: Varsayılan olaraq, curl HTTP əsas autentifikasiyasından istifadə edir. Biz –ntlm | istifadə edərək digər autentifikasiya üsullarını təyin edə bilərik - həzm etmək.


cURL həmçinin FTP serverlərindən faylları yükləmək üçün də istifadə edilə bilər. Göstərilən FTP yolu bir kataloqdursa, standart olaraq oradakı faylların siyahısı göstərilir.

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

Yuxarıdakı əmr xss.php faylını ftp serverindən endirəcək və onu yerli kataloqda saxlayacaq.

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

Burada URL bir kataloqa istinad edir. Buna görə də, cURL verilmiş URL-də faylları və qovluqları sadalayacaqdır.


CURL URL-lərdə göstərilən diapazonları dəstəkləyir. Aralıq verildikdə, həmin diapazonda olan müvafiq fayllar yüklənəcək. Bu, FTP güzgü saytlarından paketləri endirərkən faydalı olacaq.

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

Yuxarıdakı əmr terminalda a-z diapazonunda olan bütün paketləri sadalayacaq.

Faylların FTP serverinə yüklənməsi
Curl, -T seçimi ilə FTP serverinə yükləmək üçün də istifadə edilə bilər.

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

Yuxarıdakı əmr myfile.txt adlı faylı FTP serverinə yükləyəcək. Siz həmçinin diapazonlardan istifadə edərək birdən çox fayl yükləyə bilərsiniz.

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

İstəyə görə biz “.” istifadə edə bilərik. standart girişdən qəbul etmək və onu uzaq maşına ötürmək.

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

Yuxarıdakı əmr istifadəçidən standart girişdən çıxışı alacaq və məzmunu ftp serverində 'myfile_1.txt' olaraq saxlayacaq.
Siz hər bir URL üçün '-T' təyin edə bilərsiniz və hər bir ünvan-fayl cütü nəyin hara yüklənəcəyini müəyyənləşdirəcək

Artan təfərrüat və iz seçimi ilə daha çox məlumat
-v seçimindən istifadə edərək nə baş verdiyini öyrənə bilərsiniz. -v seçimi şifahi rejimi işə salır və təfərrüatları çap edəcək.

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

Yuxarıdakı əmr aşağıdakıları çıxaracaq

* URL yenidən quruldu: https://www.google.co.th/?gws_rd=ssl * Host adı DNS keşində TAPILMADI * 27.123.17.49 cəhd edilir... * www.google.co.th (27.123. 17.49) port 80 (#0) > GET / HTTP/1.1 > İstifadəçi-Agent: curl/7.38.0 > Host: www.google.co.th > Qəbul edin: */* >< 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 ... ... ...

Əgər sizə daha ətraflı məlumat lazımdırsa, o zaman -trace seçimindən istifadə edə bilərsiniz. -trace seçimi müəyyən bir fayl üçün bütün daxil olan/gidən məlumatların tam izlənməsinə imkan verəcəkdir

02/16/2006 Jeff Felling

Curl sizə İnternetdə yerləşdirilən məlumatları idarə etməyə kömək edəcək. Curl bir çoxunu avtomatlaşdırmağı asanlaşdırır

Curl İnternetdəki məlumatlarınızı idarə etməyə kömək edəcək

Bu məqalə Curl adlı pulsuz aləti əhatə edir ki, bu da sizə əmr satırından Veb səhifələri göndərməyə və qəbul etməyə imkan verir. Curl təhlil üçün Veb səhifəni çıxarmaq və ya İnternetdən təhlükəsizlik yamasının endirilməsi kimi bir çox təhlükəsizlik və inzibati tapşırıqları avtomatlaşdırmağı asanlaşdırır.

Qıvrım quraşdırılması

Curl bir çox Unix paylamalarına daxildir. Binaries və mənbələr əksər digər əməliyyat sistemləri üçün mövcuddur. Hətta açıq mənbəli PHP proqramçıları PHP skriptlərindən birbaşa Veb məzmununa təhlükəsiz daxil olmaq üçün Curl-dan istifadə edə bilərlər.

Curl Secure Sockets Layer (SSL) Veb saytları ilə işləmək üçün OpenSSL paketini tələb edir. Curl-un iki versiyası var: biri SSL, digəri isə SSL-siz. Birincisini tövsiyə edirəm, çünki SSL məlumatları etibarlı şəkildə qoruyur.

Curl-dan SSL funksionallığı ilə istifadə etməzdən əvvəl OpenSSL paketini endirməli və ayrıca quraşdırmalısınız. Windows binaries üçün OpenSSL GnuWin32 SourceForge layihə saytından endirilə bilər. Bu saytda Windows-a köçürülmüş bir çox başqa faydalı alətlər var.

Siz OpenSSL paketini endirib quraşdırmalı, sonra iki DLL faylını system32 qovluğuna kopyalamalısınız:

Kopyalayın "C:Program FilesGnuWin32 binlibeay32.dll" %windir%system32 surəti "C:Program FilesGnuWin32 binlibssl32.dll" %windir%system32

Bundan sonra Curl-u quraşdıra bilərsiniz. Windows üçün SSL-uyğun Curl ikili faylları burada tapa bilərsiniz http://curl.haxx.se/latest.cgi?curl=win32-ssl-sspi. Ən yeni versiya, curl 7.15.0, curl.exe və sənədləri ehtiva edən win32-ssl-sspi.zip-dədir.

Curl-u quraşdırdıqdan sonra əmri daxil edərək onun işlədiyinə əmin olmalısınız

Qıvrım http://isc.sans.org/infocon.txt

Ekranda rəngli söz görünsə (məsələn, yaşıl), Curl işləyir. Bu sadə nümunədə Curl SANS İnstitutunun İnternet Fırtınası Mərkəzinin veb saytından Infocon məzmununu alır. Yaşıl o deməkdir ki, İnternet normal işləyir və heç bir ciddi təhlükə aşkarlanmamışdır. Ekranda yaşıl əvəzinə sarı, narıncı və ya qırmızı sözləri görünürsə, bu məqaləni kənara qoyun və vebsayta daxil olun http://isc.sans.orgİnternetdə yüksək riskli şərtlər haqqında öyrənmək. Səhv baş verərsə, Curl-un düzgün quraşdırıldığını yoxlamaq lazımdır.

Əsasən, Curl Veb səhifəni gətirir və sonra səhifənin HTML mənbəyini konsola çıxarır. Bununla belə, kommunalın imkanları daha genişdir. Curl-də quraşdırılmış səhv yoxlaması var. Məsələn, əmr

http://noserverburada qıvrın

xəta verir Curl: (6) Host həll edilə bilmədi: noserverhere; Host tapılmadı. Səhv kodları skriptlərdə Veb səhifənin mövcudluğunu və ya Veb serverin cavab vermə qabiliyyətini yoxlamaq üçün istifadə edilə bilər. Məsələn, hər gün Veb səhifəni, xüsusən də gündəlik Veb sayt statistikasını əldə etmək üçün Curl-dan istifadə edirsinizsə, skripti səhv kodlarını axtaran mənbə kodu ilə artıra bilərsiniz. Curl xəta kodunu verirsə Curl: (7) hosta qoşula bilmədi, siz dərhal xəbərdarlıq edə və ya e-poçt göndərə bilərsiniz.

Şifrələnmiş məlumatların çıxarılması

Curl-un ən mühüm üstünlüklərindən biri onun SSL uyğunluğudur. Tələb olunan HTTPS səhifələri şəbəkə üzərindən şifrələnmiş şəkildə göndərilir və sonra Curl bərpa edilmiş mətni ekranda göstərir. Curl həmçinin sertifikatları yoxlayır - sertifikatın sona çatma tarixini, host adının sertifikatdakı host adına uyğun olub-olmamasını və kök sertifikatın etibar səviyyəsini - yoxlayır və sertifikatın səhv olub olmadığını xəbərdar edir. -cacert seçimi xüsusi sertifikat faylını təyin etməyə imkan verir. Sertifikat yoxlanışı -k seçimindən istifadə edilərək deaktiv edilir. Alternativ yanaşma -insecure variantından istifadə etməkdir.

Yalnız WWW üçün deyil

Curl-un imkanları sadəcə İnternet üzərindən fayl göndərməkdən kənara çıxır. Curl-dan istifadə edərək FTP saytının qovluqlarını tez bir zamanda sadalaya bilərsiniz:

Curl ftp://myftpsite

Saytın alt kataloqlarını görmək üçün əmri daxil edin

Curl ftp://myftpsite/subdir/

İnternetdən fayl yükləmək üçün sadəcə URL-də fayl adını göstərin. Aşağıdakı nümunə readme.txt adlı faylı birbaşa əmr satırından yükləyir və onu ekranda göstərir:

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

FTP fayllarını daxil etmək üçün Curl skriptini hazırlamaq çox vaxt FTP əmrini interaktiv şəkildə istifadə etməkdən daha asandır.

Varsayılan olaraq, məlumat birbaşa konsola çıxarılır, lakin -o və -O seçimlərindən istifadə edərək fayla yönləndirilə bilər. Səhifəni əldə etmək və diskdə saxlamaq üçün -o seçimini qeyd etməlisiniz. -O seçimi nəticədə yaranan səhifəni yerli faylda saxlayır və Curl uzaq sənədin adını alır. URL-də fayl adı yoxdursa, bu əməliyyat uğursuz olacaq. Əgər fayl adı olmayan veb saytına sorğu göndərmək üçün Curl-dan istifadə edirsinizsə, lakin nəticəni faylda saxlamaq istəyirsinizsə, faylın adını əmr sətirində təyin edə bilərsiniz, məsələn:

İdentifikasiyası

Curl Əsas, Digest və İnteqrasiya edilmiş autentifikasiya üsullarını təmin edir. Əksər saytlarda forma əsaslı autentifikasiya səhifələrinə aşağıda göstərildiyi kimi Curl-un təqdimetmə funksiyalarından istifadə etməklə daxil olmaq olar. Bu o deməkdir ki, siz istifadəçi adı və şifrəniz kimi forma məlumatlarını öz Veb səhifəsinə məlumat daxil etməyi təklif edən uzaq Veb saytına göndərə bilərsiniz. Siz etimadnamələri yönləndirmək və ya ənənəvi olaraq FTP-də edildiyi kimi URL-yə yapışdırmaq üçün -u seçimindən istifadə edə bilərsiniz, məsələn:

Curl ftp://username: password@myhtmlsite

Curl istifadə edərək, FTP-dən götürülmüş texnikalar aşağıdakı nümunədə olduğu kimi HTTP-yə ötürülə bilər:

Curl http://username:password @myhtmlsite/default.htm

Curl həmçinin proxy server vasitəsilə Veb səhifələrə girişi təmin edir. Buna görə də, Curl Əsas, Digest və NTLM rejimlərində autentifikasiya üçün proxy serverdən istifadə etmək üçün konfiqurasiya edilə bilər.

Sənədləri oxuyun

Bir məqalədə Curl-un bütün bir çox funksiyalarını əhatə etmək çətindir, o cümlədən serverə faylları yükləmək (-T) və yalnız HTTP başlıqındakı məlumatlara baxmaq (-I) və bütün məlumatlara ətraflı rejimdə baxmaq (-V). ) və gizli çıxış ( -s). Mən burada yerləşdirilən dərslikdə Curl-un xüsusiyyətlərinə daha dərindən nəzər salmağı məsləhət görürəm http://curl.haxx.se/docs .

Curl istifadə nümunəsi

İndi biz Curl-un əsaslarını öyrəndiyimizə görə, bəzi girişlər verilmiş Veb saytından məlumatların əldə edilməsinin sadə nümunəsinə baxaq. Curl-dan istifadənin sadəliyini və asanlığını və -d parametrindən istifadə edərək məlumatların veb-sayta göndərilməsi prosedurunu nümayiş etdirən sadə Whois aləti yaradaq. Bu nümunədə Curl IP ünvanını Arin Whois Veb saytına göndərir və sonra həmin saytdan nəticələri alır. Whois IP ünvanının sahibi haqqında məlumat axtarır.

Başlamazdan əvvəl Veb saytı araşdırmaq vacibdir, çünki hər saytın mənbə kodu fərqlidir və Curl həmişə hər saytda eyni işləmir. Sayta ilkin səfər, Curl-un işləməsi üçün lazımi məlumatları toplamağa imkan verir. Bu nümunədə mən veb saytına daxil olmaq üçün brauzerdən istifadə etdim http://www.arin.net/whois/, və saytın ziyarətçilərin maraqlandıqları IP ünvanını göstərdiyi vahid məlumat giriş sahəsinin olduğunu qeyd etdi. Veb formasının bir hissəsi olan bu sahənin təfərrüatlarını əldə etməlisiniz. Bu nümunə Perl skriptindən istifadə edir formfind.pl ( http://cool.haxx.se/cvs.cgi/curl/perl/contrib/ formfind?rev=HEAD&content-type=text/vnd.viewcvs-markup). Formfind.pl skripti forma məlumatlarını faydalı çıxış nəticələrinə çevirir və HTML-də verilənlərin əl ilə axtarışını asanlaşdırır. Əlbəttə ki, Formfind-i işə salmaq üçün Perl kompüterinizdə yerləşdirilməlidir. Yaxşı Win32 Perl paketini ActiveState ActivePerl saytından sifariş etmək olar http://www.activestate.com .

Nümunəyə daha ətraflı baxaq. Əvvəlcə məlumat tələb edən formanı ehtiva edən veb saytına baxaq:

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

Bu komanda Whois səhifəsini http://www.arin.net saytından götürür və onu sayta daxil olan zaman brauzer tərəfindən göstərilən orijinal HTML mətnini ehtiva edən whoisOutputFile mətn faylında saxlayır.

Sonra forma məlumatlarını tapıb seçməlisiniz:

./formfind.pl

Formfind forma dəyişənlərini və onların mümkün dəyərlərini təmin edir. Bu nümunədə çıxış nəticələri olduqca sadədir (bax. ekran 1).

queryyinput adlı Daxiletmə forması məlumatlarına diqqət yetirin. Bu, Curl-un axtardığınız IP ünvanını göndərməli olduğu mətn sahəsidir. Xüsusi IP ünvanının əhəmiyyəti yoxdur - bu nümunədə Microsoft ünvanı istifadə edilmişdir. -d parametrindən istifadə edərək, axtarılan IP ünvanı sorğunun daxil edilməsi sahəsinə yönləndirilir:

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

-d seçimi ilə Curl əmri məlumatı formada axtarır, bu halda axtarılan IP ünvanını əks etdirən sorğunun girişi. Bu halda hədəf ünvanı dəyişir; forma məlumatları whois.pl skriptini təmsil edən yeni URL-yə təqdim etməlidir. Yeni hədəf ünvanı Ekran 1-də formfind çıxışında görmək olar.

Bu misal həmçinin Whois cavabının orijinal HTML mətnini alır, lakin o, bir qrup HTML teqləri tərəfindən gizlədilir. Varsayılan olaraq, Curl status mesajı sənəd ölçüsünü, tamamlanma faizini və yönləndirmə sürətini göstərir. Çıxış bir az təmizlənə və IP ünvanına sahib olan təşkilatın adı ilə süzülə bilər. Qıvrım statusu -s seçimindən istifadə edərək deaktiv edilə bilər. Yalnız OrgName əldə etmək üçün əmr grep vasitəsilə yerinə yetirilməlidir:

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

Bu nümunədə çıxış OrgName-in Microsoft Corp olduğunu göstərir.

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


Komanda Xəttindən Veb Faylların Yüklənməsi


Həqiqi praktik nümunə: IP ünvanını dəyişdirmək üçün marşrutlaşdırıcını (modemi) yenidən başlatmalısınız. Bunu etmək üçün sizə lazımdır: marşrutlaşdırıcıya daxil olun, texniki xidmət səhifəsinə keçin və "Yenidən başladın" düyməsini basın. Bu hərəkəti bir neçə dəfə yerinə yetirmək lazımdırsa, prosedur təkrarlanmalıdır. Razılaşın, bu rejimi hər dəfə əl ilə etmək istəmirsiniz. cURL bütün bunları avtomatlaşdırmağa imkan verir. Yalnız bir neçə cURL əmri ilə siz avtorizasiya əldə edə və marşrutlaşdırıcıda tapşırığı tamamlaya bilərsiniz.

  • cURL əmr satırında veb saytlardan məlumat almaq üçün faydalıdır.
Başqa bir praktiki nümunə: biz bir neçə sayt üçün ümumi statistikanın nümayişini həyata keçirmək istəyirik. Əgər cURL-dən istifadə etsək, bu, tamamilə mənasız bir işə çevrilir: cURL-dan istifadə edərək biz statistika toplama xidmətində autentifikasiya edirik (tələb olunduqda), sonra (yenidən cURL əmrlərindən istifadə etməklə) lazımi səhifələri əldə edirik, bizə lazım olan məlumatları təhlil edirik; prosedur bütün saytlarımız üçün təkrarlanır, sonra biz əlavə edirik və yekun nəticəni göstəririk.

Bunlar. cURL-dən istifadə halları olduqca realdır, baxmayaraq ki, əksər hallarda cURL öz proqramları üçün istifadə edən proqramçılara lazımdır.

CURL bir çox protokolları və avtorizasiya üsullarını dəstəkləyir, faylları ötürə bilir, kukilərlə düzgün işləyir, SSL sertifikatlarını, etibarnamələri və s. dəstəkləyir.

PHP və komanda xəttində cURL

Biz cURL-dən iki əsas şəkildə istifadə edə bilərik: PHP skriptlərində və komanda xəttində.

Serverdə PHP-də cURL-i aktivləşdirmək üçün php.ini faylındakı sətri şərhdən çıxarmalısınız.

Extension=php_curl.dll

Və sonra serveri yenidən başladın.

Linux-da siz curl paketini quraşdırmalısınız.

Debian, Ubuntu və ya Linux Mint-də:

$ sudo apt-get install curl


Fedora, CentOS və ya RHEL-də:

$ sudo yum curl quraşdırın

PHP-də və komanda xəttində istifadə fərqini aydın görmək üçün eyni tapşırıqları iki dəfə yerinə yetirəcəyik: əvvəlcə PHP skriptində, sonra isə komanda xəttində. Çalışaq ki, çaşqınlıq olmasın.

cURL istifadə edərək məlumatların alınması

PHP-də cURL istifadə edərək məlumatların alınması

PHP-də nümunə:

Hər şey çox sadədir:
$target_url- bizi maraqlandıran saytın ünvanı. Sayt ünvanından sonra iki nöqtə qoyub port ünvanını əlavə edə bilərsiniz (port standartdan fərqlidirsə).

curl_init- yeni seansı işə salır və nümunəmizdə dəyişənə təyin edilmiş sapı qaytarır $ch.

Sonra sorğunu cURL funksiyası ilə icra edirik curl_exec, ona parametr kimi deskriptor ötürülür.

Hər şey çox məntiqlidir, lakin bu skript icra edildikdə, saytın məzmunu səhifəmizdə görünəcək. Bəs məzmunu göstərmək istəmiriksə, ancaq onu dəyişənə yazmaq istəsək (sonradan emal və ya təhlil üçün).

Skriptimizə bir az əlavə edək:

0) ( echo "Curl xətası: " . curl_error($ch); ) curl_close($ch); ?>

Bizim bir xəttimiz var curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);.

curl_setopt- variantları təyin edir. Seçimlərin tam siyahısını bu səhifədə tapa bilərsiniz:

Qonaqlardan gizlədilib

$cavab_data = curl_exec($ch);

İndi skript dəyəri $response_data dəyişəninə təyin edilir, onunla sonrakı əməliyyatlar yerinə yetirilə bilər. Məsələn, onun məzmununu göstərə bilərsiniz.

Dikişlər

Əgər (curl_errno($ch) > 0) ( echo "Qıvrılma xətası: " . curl_error($ch); )

xətaların baş verməsi halında sazlama üçün xidmət edir.

Komanda xəttində cURL istifadə edərək məlumatların alınması

Komanda xəttində sadəcə yazın

əvəzinə harada mi-al.ru- veb saytınızın ünvanı.

Nəticəni ekranda göstərməkdənsə, məlumatları dəyişənə köçürmək lazımdırsa, bunu edin:

Temp="curl mi-al.ru"

Bununla belə, bəzi məlumatlar hələ də göstərilir:

Onların göstərilməsinin qarşısını almaq üçün açarı əlavə edin -s:

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

Nə yazıldığını görə bilərsiniz:

Echo $temp | az

Əsas və HTTP autentifikasiyası

Doğrulama, sadəcə olaraq, istifadəçi adı və parolun daxil edilməsidir.

Əsas autentifikasiya server əsaslı autentifikasiyadır. Bunun üçün iki fayl yaradılır: .htaccess.htpasswd

.htaccess faylının məzmunu bu kimi bir şeydir

AuthName "Yalnız qeydiyyatdan keçmiş istifadəçilər üçün!" AuthType Basic etibarlı istifadəçi tələb edir AuthUserFile /home/freeforum.biz/htdocs/.htpassw


.htpasswd faylının məzmunu belədir:

Mial:CRdiI.ZrZQRRc

Bunlar. giriş və parol hash.

Parolla qorunan qovluğa daxil olmağa çalışdığınız zaman brauzer belə bir şey göstərəcək:

HTTP identifikasiyası veb-saytdakı formaya giriş və parol daxil etdiyimiz haldır. Məhz bu identifikasiya poçta, forumlara və s.-ə daxil olarkən istifadə olunur.

Əsas cURL identifikasiyası (PHP)

Veb saytı var

Qonaqlardan gizlədilib

Gəlin ilkin skriptimizi sınayaq:

0) ( echo "Curl xətası: " . curl_error($ch); ) else ( echo $response_data; ) curl_close($ch); ?>

Skript heç bir səhv olmadığına inansa da, çıxışı heç bəyənmirik:

İki sətir əlavə edin:

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

İlk sətirdə identifikasiya növünü təyin etdik - əsas. İkinci sətirdə iki nöqtə ilə ayrılmış ad və parol var (bizim vəziyyətimizdə ad və parol eynidir - ru-board). Belə çıxdı:

0) ( echo "Curl xətası: " . curl_error($ch); ) else ( echo $response_data; ) curl_close($ch); ?> Gəlin cəhd edək: 30946 Əla! Əsas cURL identifikasiyası (komanda xəttində) Eyni şeyi bir sətir ilə komanda xəttində əldə etmək olar: curl -u ru-board:ru-board http://62.113.208.29/Update_FED_DAYS/

Mən autentifikasiya növünü qeyd etməyi unutmadım, sadəcə olaraq cURL-də əsas autentifikasiya növü standartdır.

Komanda xəttində hər şey o qədər tez işlədi ki, məyusluqdan aşağıdakı proqramı yazdım. O, sayta qoşulur və ən son yeniləməni yükləyir:

Temp=`curl -s -u ru-board:ru-board http://62.113.208.29/Update_FED_DAYS/ | grep -E -o "Yeniləmə_FED_201(1).(2).(2).7z" | uniq | quyruq -n 1`; curl -o $temp -u ru-board:ru-board http://62.113.208.29/Update_FED_DAYS/$temp

Yalnız bir neçə daha çox əmrlə əlavə edə bilərsiniz:

  • arxivi göstərilən qovluğa çıxarmaq;
  • ConsultantPlus yeniləmələrinin işə salınması (bunlar onun üçün yeniləmələrdir);
  • ən son mövcud yeniləmənin artıq yükləndiyini və ya yenisinin göründüyünü yoxlaya bilərsiniz;
  • gündəlik yeniləmələr üçün hamısını Cron-a əlavə edin.
HTTP autentifikasiyası cURL

PHP-də HTTP cURL identifikasiyası

Bilməliyik:

  • autentifikasiya məlumatlarının göndəriləcəyi ünvan
  • GET və ya POST göndərmə üsulu
  • daxil ol
  • parol
Bəzən bu məlumatlar kifayət etmir. Gəlin bunu anlayaq.

Məlumatı göndərməyiniz lazım olan ünvan autentifikasiya formasından götürülə bilər. Misal üçün:

Mülkiyyətə baxırıq hərəkət. Bunlar. son səhifədir login.php. Bizə tam ünvan lazımdır, bu kimi

Qonaqlardan gizlədilib

Burada göndərmə üsulunu da tapırıq: metod = "yazı"

Mən login və parolu da bilirəm: admin və qwerasdfzxcv
Bunlar. POST metodundan istifadə edərək formadan serverə sətir göndərilir. Nəzəri olaraq, yeni sətir əlavə etdiyimiz əvvəlki skriptimiz işləməlidir. Bunlar. autentifikasiya baş verməlidir.

0) ( echo "Curl xətası: " . curl_error($ch); ) else ( ) curl_close($ch); ?>

Skriptdə yeni sətir

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

Burada curl_setopt- cURL üçün seçimləri təyin etmək üçün bizə artıq tanış olan bir funksiya, CURLOPT_POSTFIELDS- bu bizim təyin etdiyimiz variantın adıdır. CURLOPT_POSTFIELDS POST metodu ilə ötürülən bütün məlumatları ehtiva edir. Yaxşı, xəttin özü LOGIN_USER=admin&LOGIN_PASSWD=qwerasdfzxcv- bu, ötürdüyümüz eyni məlumatlardır.

Formanı diqqətlə nəzərdən keçirsəniz, onun da gizli sahələrin olduğunu görəcəksiniz. Və verilənləri JavaScript ilə emal etmək və ya əlavə etmək olar.

Mən Wireshark istifadə edirəm. Bu proqram trafiki iyləmək (tutmaq) üçün nəzərdə tutulub. Sayta dəqiq nəyin ötürüldüyünü görmək çox rahatdır.

Bu kiçik videoya baxın:


Bunlar. məlumatların ötürüldüyü ünvanla, mən doğru təxmin etdim. Ancaq ötürülən sim daha mürəkkəb oldu.

Düzgün parametri daxil etdim və skripti bir az dəyişdirdim ki, o, nəinki daxil olur, həm də marşrutlaşdırıcıdan bir şey alır:

0) ( echo "Qıvrılma xətası: " . 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); , "", $results2); $results2 = str_replace("";", "", $results2); echo "Wi-Fi şəbəkəsinin adı: $nəticələr2
"; preg_match("|f_wpa.wpapsk1.value(.*)";|", $response_data2, $results3); $results3 = str_replace("f_wpa.wpapsk1.value", "", $results3); $results3 = str_replace("="", "", $results3); $results3 = str_replace("";", "", $results3); echo "Wi-Fi şəbəkə parolu: $nəticələr3"; ) curl_close($ch); ?>

Yeri gəlmişkən, əgər sahibi parolu yeniləyirsə (lakin proqram təminatını yeniləmirsə), onda yeni parola həmişə burada baxmaq olar.

Qonaqlardan gizlədilib

(Bu, D-Link DIR-300, D-Link DIR-320 və D-Link DAP-1353 marşrutlaşdırıcılarında tanınmış zəiflikdir).

Komanda xəttində HTTP cURL identifikasiyası

Biz artıq tam ünvanı, eləcə də ötürüləcək sətri bilirik. Beləliklə, sadədir:

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

Düşünürəm ki, hər şey aydındır, çünki biz bu müddətləri artıq nəzərdən keçirmişik. Kim başa düşmürsə, şərhlərdə soruşun.

Məlumatları əldə etmək və təhlil etmək üçün cURL-dən istifadə nümunəsi aşağıdakı əmrlər dəsti ola bilər:

Curl -s --data "ACTION_POST=LOGIN&FILECODE=&DOĞRULAMA_KODU=&LOGIN_USER=admin&LOGIN_PASSWD=qwerasdfzxcv&login=Log+In+&VER_CODE=" http://188.35.8.64:8080/enuv&login.phcholl/de " && echo "Wi-Fi şəbəkəsinin adı" && 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 şəbəkə parolu" && 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/="//"

Bu başlığı belə yazmaq daha düzgün olardı: “Mürəkkəb” icazə halları. Bunlar. "Mürəkkəb" sözünü dırnaq işarəsinə qoyun. Onlar yalnız ilk baxışdan mürəkkəb görünürlər, aydın olmayanda: göndərmə harada baş verir, hansı sahə adlarıdır, dəqiq nə göndərilir və s.

Lakin, əslində, hamısı POST və ya GET metodlarına gəlir. Dəqiq nəyin göndərildiyini başa düşmək üçün siz forma ilə səhifəni diskinizdə saxlaya və göndərmə düyməsinə göndərilmək üçün yaradılan məlumatları göstərmək funksiyasını əlavə edə bilərsiniz. Və ya daha sadə - mənim kimi, Wireshark.

Məlumat düzgündürsə, lakin identifikasiya baş vermirsə, aşağıdakı istiqamətlərdə qazmalısınız:

  • düzgün istinad sətirini təyin edin
  • "düzgün" istifadəçi agent sətirini təyin edin.
Bütün bunlar əsas cURL metodlarından istifadə etməklə edilə bilər, lakin mən buna girməyəcəyəm. Dərs artıq kifayət qədər uzun idi, amma mən də cURL ilə bir neçə fənd göstərmək istədim.

Məsləhətlər və fəndlər cURL

cURL və CURLOPT_COOKIEJAR əlavə olaraq kuki qəbul edir

Düşünürəm ki, artıq aydındır ki, cURL kukiləri düzgün idarə edir - onları saxlayır, server tələb etdikdə istifadə edir və s. Amma bəzən kukiləri saxlamaq lazımdır. Bunun üçün CURLOPT_COOKIEJAR adlı bir seçim var, lakin ondan istifadə etmək həmişə mümkün olmur. İlk hiyləmiz buna həsr edilmişdir.

Bəzən PHP serverdə konfiqurasiya olunduğuna görə CURLOPT_COOKIEJAR (qəbul edilmiş kukiləri faylda saxlamağa imkan verir) və CURLOPT_COOKIEFILE (fayldan kukilərdən istifadə etməyə imkan verir) kimi seçimlər bizim üçün əlçatan olmur. Çünki deyirlər ki, bu seçimlərdən istifadə etməklə onların serverindən istənilən faylı oğurlaya bilərik. Bu problemin həlli budur:

1) Biz CURLOPT_FOLLOWLOCATION istifadə etmirik
2) curl_setopt istifadə edin ($ch, CURLOPT_HEADER, 1)
3) Başlıqdan kukiləri belə toplayın:

Preg_match_all("|Set-Cookie: (.*);|U", $content, $nəticələr); $cookies = implode(";", $nəticələr);

4) curl_setopt($ch, CURLOPT_COOKIE, $cookies) istifadə edərək onları təyin edin;

İkinci ipucu. Təcavüzkardan qurbana çevrilə bilərik. Ortadakı adam hücumunun qurbanı olmamaq üçün bunu edirik.

Lütfən, hər kəs, CURLOPT_SSL_VERIFYPEER parametrini false və ya 0-a təyin etməyi dayandırın. Əgər PHP quraşdırmanızda kök CA sertifikatlarının müasir dəsti yoxdursa, curl saytından birini endirin və serverinizdə saxlayın:

Qonaqlardan gizlədilib

Sonra php.ini faylınızdakı yolu təyin edin, məsələn, Windows-da:

Curl.cainfo=c:phpcacert.pem

CURLOPT_SSL_VERIFYPEER-in söndürülməsi bizim istəmədiyimiz adam-in-the-middle (MITM) hücumuna imkan verir!

Yaxşı, bu gün üçün son məsləhət. Çoxlu sayda asinxron curl sorğularının mümkün olduğunu bilirdinizmi?

Bunun üçün istifadə edə bilərsiniz curl_multi_init. Rəsmi sənədlərdə təfərrüatlar və nümunə kodu

Qonaqlardan gizlədilib

Qonaqlardan gizlədilib


Komanda xəttində cURL haqqında

Qonaqlardan gizlədilib


CURL dərsinin ikinci hissəsi də rus dilində oxumaq üçün hazırlanmışdır: "".

Bu məqalə sizin şəbəkə və HTML əsaslarını bildiyinizi güman edir.

Yaxşı kompüter sistemi qurmaq üçün skript yazmaq bacarığı vacibdir. Unix sistemlərinin qabıq skriptləri və avtomatlaşdırılmış əmrləri yerinə yetirən müxtəlif proqramlarla genişlənməsi onların bu qədər uğurlu olmasının səbəblərindən biridir.

İnternetə keçən tətbiqlərin sayının artması HTTP skriptləri mövzusunun getdikcə populyarlaşmasına səbəb oldu. Bu sahədə vacib vəzifələr avtomatik olaraq İnternetdən məlumatların alınması, məlumatların veb serverlərə göndərilməsi və ya endirilməsi və s.

Curl müxtəlif növ URL manipulyasiyası və köçürmələri etməyə imkan verən əmr xətti alətidir. Bu məqalə sadə HTTP sorğularının yaradılmasına yönəlmişdir. Güman edilir ki, siz artıq hara yazacağınızı bilirsiniz

# curl --kömək

# curl --əl ilə

curl haqqında məlumat üçün.

Curl sizin üçün hər şeyi edəcək bir vasitə deyil. O, sorğular yaradır, məlumatları qəbul edir və məlumat göndərir. Hər şeyi bir yerdə saxlamaq üçün bir növ "yapışqan"a ehtiyacınız ola bilər, bəlkə də bəzi skript dili (bash kimi) və ya bəzi əl zəngləri.

1. HTTP protokolu

HTTP veb serverlərdən məlumat qəbul edərkən istifadə olunan bir protokoldur. Bu TCP/IP üzərində qurulmuş çox sadə protokoldur. Protokol həmçinin, daha sonra göstəriləcəyi kimi, bir neçə üsuldan istifadə etməklə müştəridən məlumatın serverə göndərilməsinə imkan verir.

HTTP, bəzi hərəkətləri tələb etmək üçün müştəridən serverə göndərilən ASCII mətn sətirləridir. Sorğu qəbul edildikdə, server müştəriyə bir neçə xidmət mətni sətirləri ilə, sonra isə faktiki məzmunla cavab verir.

Curl -v keçidindən istifadə edərək, curl-un serverə hansı əmrləri, eləcə də digər məlumat mətnini göndərdiyini görə bilərsiniz. -v keçidi, bəlkə də, curl və veb server arasındakı qarşılıqlı əlaqəni sazlamaq və ya anlamaq üçün yeganə yoldur.

2. URL

URL formatı (Uniform Resource Locator) İnternetdəki xüsusi resursun ünvanını təyin edir. Yəqin ki, siz bunu bilirsiniz, nümunə URL-lər: http://curl.haxx.se və ya https://yourbank.com.

3. Get (GET) səhifəsi

Ən sadə və ən çox yayılmış HTTP sorğusu URL-in məzmununu əldə etməkdir. URL veb səhifəyə, şəkilə və ya fayla keçid edə bilər. Müştəri serverə GET sorğusu göndərir və tələb olunan sənədi alır. Əgər əmri icra etsəniz

# curl http://curl.haxx.se

terminal pəncərəsinə veb səhifə çıxışı alacaqsınız. Bu URL-də olan tam HTML sənədi.

Bütün HTTP cavablarında adətən gizlədilmiş başlıqlar dəsti var. Onları sənədin özü ilə birlikdə görmək üçün curl -i keçidindən istifadə edin. Siz həmçinin -I keçidindən istifadə edərək yalnız başlıqları tələb edə bilərsiniz (bu, HEAD sorğusu verməyə məcbur edəcək).

4. Formalar

Formalar, istifadəçinin məlumatları daxil etdiyi və sonra "OK" və ya "Göndər" düyməsini kliklədiyi, bundan sonra verilənlərin serverə göndərildiyi sahələrə malik HTML səhifəsi kimi vebsaytı təqdim etməyin əsas üsuludur. Bundan sonra server alınan məlumatlardan istifadə edir və bundan sonra nə edəcəyinə qərar verir: verilənlər bazasında məlumatı axtarın, daxil edilmiş ünvanı xəritədə göstərin, xəta mesajı əlavə edin və ya istifadəçinin autentifikasiyası üçün məlumatdan istifadə edin. Əlbəttə ki, server tərəfində məlumatlarınızı qəbul edən bəzi proqramlar var.

4.1 GET

GET forması GET metodundan istifadə edir, məsələn:

Bu kodu brauzerinizdə açsanız, mətn sahəsi və "OK" yazan düyməsi olan bir forma görəcəksiniz. Əgər "1905" daxil etsəniz və OK düyməsini sıxsanız, brauzer izləyəcəyi yeni URL yaradacaq. URL əvvəlki URL-in yolundan və "junk.cgi?birthyear=1905&press=OK" kimi sətirdən ibarət sətir kimi təqdim olunacaq.

Məsələn, əgər forma "www.hotmail.com/when/birth.html" ünvanında yerləşirdisə, OK düyməsini klikləməklə sizi "www.hotmail.com/when/junk.cgi?birthyear=1905&press=OK" ünvanına aparacaqsınız. " .

Əksər axtarış motorları bu şəkildə işləyir.

Curl-un GET sorğusu yaratmaq üçün formadan gözlədiyinizi daxil edin:

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

4.2 POST

GET metodu bütün daxil edilmiş məlumatların brauzerinizin ünvan çubuğunda görünməsinə səbəb olur. Səhifəni əlfəcin qoymağınız lazım olduqda bu yaxşı ola bilər, lakin forma sahələrinə həssas məlumatları daxil etdikdə və ya sahələrə daxil edilmiş məlumatların miqdarı çox böyük olduqda (nəticədə oxunmayan URL ilə nəticələnir) aşkar çatışmazlıqdır.

HTTP protokolu POST metodunu təmin edir. Bununla, müştəri məlumatları URL-dən ayrıca göndərir və buna görə də siz onu ünvan çubuğunda görməyəcəksiniz.

POST sorğusunu yaradan forma əvvəlkinə bənzəyir:

Curl aşağıdakı kimi eyni məlumatlarla POST sorğusu yarada bilər:

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

Bu POST sorğusu ən çox istifadə edilən metod olan "Content-Type application/x-www-form-urlencoded" istifadə edir.

Serverə göndərdiyiniz məlumatlar düzgün kodlaşdırılmalıdır, curl sizin üçün bunu etməyəcək. Məsələn, verilənlərin boşluqdan ibarət olmasını istəyirsinizsə, boşluğu %20 və s. ilə əvəz etməlisiniz. Bu məsələyə diqqət yetirilməməsi ümumi bir səhvdir, buna görə məlumatlar lazım olduğu kimi ötürülmür.

Hələ 1995-ci ildə HTTP üzərindən məlumat ötürmək üçün əlavə üsul müəyyən edilmişdir. RFC 1867-də sənədləşdirilmişdir, buna görə də bu üsul bəzən RFC1867-göndərmə adlanır.

Bu üsul əsasən fayl yükləməni daha yaxşı dəstəkləmək üçün nəzərdə tutulmuşdur. İstifadəçiyə fayl yükləmək imkanı verən forma HTML-də belə görünür:

Nəzərə alın ki, Məzmun Növü çoxhissəli/forma verilənləri olaraq təyin edilib.

curl istifadə edərək bu forma məlumat göndərmək üçün əmri daxil edin:

# curl -F upload=@localfilename -F press=OK

4.4 Gizli sahələr

HTML proqramlarında dövlət məlumatlarını ötürməyin ümumi üsulu formalarda gizli sahələrdən istifadə etməkdir. Gizli sahələr doldurulmur, onlar istifadəçi üçün görünməzdir və adi sahələrlə eyni şəkildə ötürülür.

Bir görünən sahə, bir gizli sahə və OK düyməsi olan formanın sadə nümunəsi:

Curl istifadə edərək POST sorğusu göndərmək üçün sahənin gizli olub-olmaması barədə düşünməyə ehtiyac yoxdur. Qıvrım üçün bunların hamısı eynidır:

# curl -d "doğum ili=1905&press=OK&şəxs=daniel"

4.5 POST sorğusunun necə göründüyünü öyrənin

Formanı doldurmaq və curl istifadə edərək serverə məlumat göndərmək istədiyiniz zaman, yəqin ki, POST sorğusunun brauzerdən istifadə edilən sorğu ilə eyni görünməsini istəyirsiniz.

POST sorğunuzu görməyin asan yolu HTML səhifəsini forma ilə diskdə saxlamaq, metodu GET-ə dəyişmək və "Göndər" düyməsini klikləməkdir (həmçinin məlumatların göndəriləcəyi URL-i də dəyişə bilərsiniz).

GET formalarından istifadə edərkən gözlənildiyi kimi, URL-ə əlavə edilmiş məlumatları "?" simvolları ilə ayrılmış görəcəksiniz.

5. QOYUN

Bəlkə də HTTP serverinə məlumat yükləməyin ən yaxşı yolu PUT-dan istifadə etməkdir. Yenə də bunun üçün arxa tərəfdə nə edəcəyini və HTTP PUT axınını necə qəbul edəcəyini bilən proqram (skript) tələb olunur.

Curl istifadə edərək faylı serverə göndərin:

# curl -T yükləmə faylı www.uploadhttp.com/receive.cgi

6. Doğrulama

Doğrulama - istifadəçi adı və şifrənin serverə ötürülməsi, bundan sonra o, tələb olunan sorğunu yerinə yetirmək hüququnuz olub olmadığını yoxlayır. Əsas identifikasiya (defolt olaraq curl istifadə edir) açıq mətnə ​​əsaslanır, bu o deməkdir ki, istifadəçi adı və parol şifrələnməyəcək, ancaq Base64 alqoritmi ilə bir qədər “dumanlanacaq” və sizinlə sizin aranızda olan yolda olan təcavüzkarlara imkan verəcək. bu məlumatı tapın HTTP server.

Curl-a istifadəçi adı və paroldan istifadə etmək əmri:

# curl -u adı:parol www.secrets.com

Sayt fərqli autentifikasiya metodunun istifadəsini tələb edə bilər (serverin başlıqlarda nə yazdığına baxın), bu hallarda siz --ntlm, --digest, --negotiate və ya hətta --anyauth açarlarından istifadə edə bilərsiniz. Bəzən xarici HTTP serverlərinə giriş proxy vasitəsilə baş verir, bu, çox vaxt şirkətlərdə və firmalarda edilir. HTTP proxy-si İnternetə daxil olmaq üçün öz istifadəçi adınızı və parolunuzu tələb edə bilər. Müvafiq qıvrım açarı:

# curl -U proxy istifadəçisi:proxypassword curl.haxx.se

Proksi NTLM metodundan istifadə edərək autentifikasiya tələb edirsə, --proxy-ntlm, əgər Digest metodu, sonra --proxy-digest seçin.

-u və -U seçimlərində parol göstərməsəniz, curl sizdən interaktiv şəkildə bunu tələb edəcək.

Qeyd edək ki, curl işləyərkən başlanğıc sətri (və onunla birlikdə açarlar və parollar) tapşırıqlar siyahısında sisteminizdəki digər istifadəçilərə görünə bilər. Bunun qarşısını almağın yolları var. Bu barədə aşağıda daha ətraflı.

7. İstinadçı

HTTP sorğusu istifadəçinin bu resursa hansı URL-dən gəldiyini göstərən “referer” sahəsini ehtiva edə bilər. Bəzi proqramlar/skriptlər "referer" sahəsini yoxlayır və istifadəçi naməlum səhifədən gəlibsə sorğunu yerinə yetirmir. Bu yoxlamaq üçün axmaq bir yol olsa da, bir çox skript hələ də ondan istifadə edir. Curl ilə siz "referer" sahəsinə hər hansı bir şey qoya və bununla da istədiyinizi edə bilərsiniz.

Bu aşağıdakı kimi edilir:

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

8. İstifadəçi Agenti

Bütün HTTP sorğuları istifadəçinin müştəri tətbiqini təyin edən "User-Agent" sahəsini dəstəkləyir. Bir çox veb proqramlar bu və ya digər şəkildə səhifəni göstərmək üçün bu məlumatdan istifadə edir. Veb proqramçılar görünüşü yaxşılaşdırmaq, müxtəlif javascript, vbscript skriptlərindən və s. istifadə etmək üçün müxtəlif brauzerlərin istifadəçiləri üçün səhifənin bir neçə versiyasını yaradırlar.

Bəzən siz görə bilərsiniz ki, curl brauzerinizdə gördüyünüz səhifə ilə eyni olmayan səhifəni qaytarır. Bu halda serveri bir daha aldatmaq üçün “User Agent” sahəsindən istifadə etmək məqsədəuyğundur.

Windows 2000 maşınında qıvrımı Internet Explorer kimi maskalayın:

# curl -A "Mozilla/4.0 (uyğundur; MSIE 5.01; Windows NT 5.0)"

Niyə Linux maşınında (PIII) Netscape 4.73 olmayaq:

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

9. İstiqamətləndirmələr

Sorğunuza cavab verərkən, server səhifənin özü əvəzinə istədiyiniz səhifəyə keçmək üçün brauzerin hara getməli olduğu barədə göstəriş verə bilər. Brauzerə yönləndirməyi bildirən başlıq "Yer:" dir.

Varsayılan olaraq, curl "Yer:" -də göstərilən ünvana getmir, sadəcə olaraq səhifəni həmişəki kimi göstərir. Ancaq bunu belə yönləndirə bilərsiniz:

# curl -L www.sitethatredirects.com

Dərhal başqa səhifəyə yönləndirilən sayta POST sorğuları etmək üçün curl istifadə edirsinizsə, -L və -d/-F birləşməsindən təhlükəsiz istifadə edə bilərsiniz. Curl ilk səhifə üçün POST sorğusu, sonra isə növbəti səhifə üçün GET sorğusu yaradacaq.

10. Kukilər

Kukilərlə veb brauzerlər müştəri tərəfində vəziyyətə nəzarət edir. Kuki məzmunu əlavə edilmiş addır. Kukilər göndərməklə server müştəriyə növbəti dəfə kukilərin göndərilməli olduğu yolu və host adını, kukilərin istifadə müddətini və bəzi digər parametrləri bildirir.

Müştəri qəbul edilmiş kukidə göstərilən ünvanda serverə qoşulduqda, müştəri həmin kukini serverə göndərir (əgər istifadə müddəti başa çatmayıbsa).

Bir çox proqramlar və serverlər çoxlu sorğuları bir məntiqi sessiyada birləşdirmək üçün bu üsuldan istifadə edirlər. Curl-un da bu funksiyanı yerinə yetirməsi üçün brauzerlər kimi kukiləri saxlaya və göndərə bilməliyik.

Curl istifadə edərək səhifə qəbul edərkən serverə kuki göndərməyin ən sadə yolu əmr satırına müvafiq keçid əlavə etməkdir:

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

Kukilər normal HTTP başlıqları kimi göndərilir. Bu, başlıqları qorumaqla curl-a kukiləri saxlamağa imkan verir. Curl istifadə edərək kukilərin saxlanması əmrlə həyata keçirilir:

# curl -D başlıqları_və kukilər www.cookiesite.com

(yeri gəlmişkən, kukiləri saxlamaq üçün -c keçidindən istifadə etmək daha yaxşıdır, daha çox aşağıda).

curl tam xüsusiyyətli kuki işləyicisinə malikdir, bu, serverə yenidən qoşulmaq və sonuncu dəfə saxlanılan (və ya əl ilə dəyişdirilmiş) kukilərdən istifadə etmək istədiyiniz zaman faydalıdır. Faylda saxlanılan kukilərdən istifadə etmək üçün curl-a belə zəng edin:

# curl -b www.cookiesite.com faylında saxlanılan kukilər

Curl-un "cookie mühərriki" -b keçidini təyin etdiyiniz zaman işə salınır. Yalnız curl kukiləri qəbul etmək istəyirsinizsə, mövcud olmayan faylı müəyyən etmək üçün -b istifadə edin. Məsələn, əgər siz curl-un bir səhifədən kukiləri qəbul etməsini və sonra yönləndirməyə əməl etməsini istəyirsinizsə (bəlkə də indicə qəbul etdiyi kukini vermək), siz curl-a belə zəng edə bilərsiniz:

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

Curl Netscape və Mozilla formatında kukiləri oxuya və yaza bilər. Bu, brauzerlər və avtomatik skriptlər arasında kukiləri mübadilə etmək üçün əlverişli bir yoldur. -b keçidi verilmiş kuki-nin müəyyən edilmiş brauzerlərin kukisi olub-olmadığını avtomatik aşkarlayır və ona uyğun idarə edir və -c/--cookie-jar açarından istifadə edərək, əməliyyat başa çatdıqdan sonra curl-i yeni kuki yazmağa məcbur edə bilərsiniz:

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

11. HTTPS

HTTP kommunikasiyalarınızı qorumağın bir neçə yolu var. Bu problemi həll edən ən məşhur protokol HTTPS və ya SSL üzərindən HTTP-dir. SSL şəbəkə üzərindən göndərilən və alınan bütün məlumatları şifrələyir, məlumatınızın məxfi qalma ehtimalını artırır.

Curl pulsuz OpenSSL kitabxanasından istifadə edərək HTTPS serverlərinə sorğuları dəstəkləyir. Müraciətlər adi şəkildə baş verir:

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

11.1 Sertifikatlar

HTTPS dünyasında identifikasiya üçün istifadəçi adı və parola əlavə olaraq sertifikatlardan istifadə edirsiniz. Curl müştəri tərəfi sertifikatlarını dəstəkləyir. Bütün sertifikatlar curl ilə işləməyə başlamazdan əvvəl daxil etməli olduğunuz parol ifadəsi ilə kilidlənir. Parol ya komanda xəttində göstərilə bilər, ya da interaktiv şəkildə daxil edilə bilər. Curl-da sertifikatlar aşağıdakı kimi istifadə olunur:

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

Curl həmçinin serverin sertifikatını yerli olaraq saxlanılan sertifikatla yoxlayaraq serverin həqiqiliyini yoxlayır. Uyğunsuzluq varsa, curl əlaqə qurmaqdan imtina edəcək. Doğrulama yoxlamalarına məhəl qoymamaq üçün -k keçidindən istifadə edin.

Sertifikatlar haqqında ətraflı məlumatı http://curl.haxx.se/docs/sslcerts.html saytında tapa bilərsiniz.

12. Xüsusi sorğu başlıqları

Siz fərdi curl sorğularının elementlərini dəyişdirməli və ya əlavə etməlisiniz.

Məsələn, siz POST sorğusunu PROPFIND-ə dəyişə və məlumatları "Məzmun növü: mətn/xml" kimi göndərə bilərsiniz (normal Məzmun Növü əvəzinə):

# curl -d " " -H "Məzmun növü: mətn/xml" -X PROPFIND url.com

Başlığı məzmunsuz qeyd etməklə silə bilərsiniz. Məsələn, siz "Host:" başlığını silərək sorğunu "boş" edə bilərsiniz:

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

Siz həmçinin başlıqlar əlavə edə bilərsiniz. Serverinizin "Təyinat:" başlığına ehtiyacı ola bilər:

# curl -H "Təyinat: http://moo.com/nowhere" http://url.com

13. Sazlama

Tez-tez olur ki, sayt curl sorğularına brauzer sorğularından fərqli cavab verir. Bu halda, curl'ı brauzerə mümkün qədər oxşar etmək lazımdır:

  • Sorğuların təfərrüatlı qeydini saxlamaq üçün --trace-ascii keçidindən istifadə edin ki, onları ətraflı şəkildə araşdırıb problemi başa düşə biləsiniz.
  • Kukiləri yoxladığınızdan və lazım olduqda istifadə etdiyinizdən əmin olun (-b oxuyun və -c-ni yadda saxlayın)
  • "istifadəçi-agent" sahəsində ən son populyar brauzerlərdən birini göstərin
  • Brauzerin etdiyi kimi "referer" sahəsini doldurun
  • POST sorğularından istifadə edirsinizsə, bütün sahələrin brauzerlə eyni qaydada göndərildiyinə əmin olun (yuxarıda 4.5-ci bəndə baxın)

Bu çətin işdə yaxşı köməkçi Mozilla/Firefox üçün LiveHTTPHeader plaginidir ki, bu da sizə bu brauzerin göndərdiyi və qəbul etdiyi bütün başlıqlara baxmaq imkanı verir (hətta HTTPS-dən istifadə edərkən).

Aşağı səviyyəli yanaşma, ethereal və ya tcpdump kimi proqramlardan istifadə edərək şəbəkədə HTTP trafikini tutmaq və sonra brauzer tərəfindən hansı başlıqların qəbul edildiyini və göndərildiyini təhlil etməkdir (HTTPS bu yanaşmanı səmərəsiz edir).

RFC 2616 HTTP protokolunu anlamaq istəyən hər kəs üçün oxunmalıdır.

RFC 2396 URL sintaksisini izah edir.

RFC 2109 kukilərin necə işlədiyini müəyyən edir.

RFC 1867 Fayl Yükləmə Yazısı formatını müəyyən edir.

http://openssl.planetmirror.com - OpenSSL layihəsinin ana səhifəsi

http://curl.haxx.se - cURL layihəsinin ana səhifəsi

Veb tərtibatçısının həyatı çətinliklərin kölgəsində qalır. Bu çətinliklərin mənbəyi bilinməyəndə xüsusilə xoşagəlməzdir. Bu, sorğunun göndərilməsi, cavab və ya üçüncü tərəf kitabxanası ilə bağlı problemdir, yoxsa xarici API səhvidir? Həyatımızı asanlaşdıra biləcək bir çox müxtəlif gadget var. Budur, mənim şəxsən əvəzolunmaz hesab etdiyim bəzi əmr xətti alətləri.

cURL
cURL, wget-ə bənzər müxtəlif protokollar üzərindən məlumat ötürmək üçün proqramdır. Əsas fərq ondadır ki, standart olaraq wget faylda saxlayır, cURL isə əmr satırına çıxış edir. Bu, veb-sayt məzmununa baxmağı çox asanlaşdırır. Məsələn, cari xarici IP-ni necə tez əldə etmək olar:

$ curl ifconfig.me 93.96.141.93
Seçimlər -i(başlıqları göstərin) və (yalnız başlıqları göstərin) cURL-ni HTTP cavablarını sazlamaq və serverin sizə tam olaraq nə göndərdiyini təhlil etmək üçün əla alətə çevirir:

$ curl -I habrahabr.ru HTTP/1.1 200 OK Server: nginx Tarix: Cümə axşamı, 18 Avqust 2011 14:15:36 GMT Məzmun növü: mətn/html; charset=utf-8 Qoşulma: diri-diri saxla: canlı saxla: vaxt aşımı=25
Parametr -L Həm də faydalıdır, cURL-ni yönləndirmələri avtomatik izləməyə məcbur edir. cURL HTTP autentifikasiyasını, kukiləri, HTTP proksiləri vasitəsilə tunelləşdirməni, başlıqlarda əl parametrlərini və daha çoxunu dəstəkləyir.

Mühasirə
Siege yük testi vasitəsidir. Üstəlik, rahat bir seçim var -g, çox oxşardır curl –iL, lakin əlavə olaraq sizə http sorğu başlıqlarını da göstərir. google.com-dan bir nümunə (bəzi başlıqlar qısalıq üçün silinib):

$ siege -g www.google.com GET / HTTP/1.1 Host: www.google.com İstifadəçi-Agent: JoeDog/1.00 (X11; I; Siege 2.70) Əlaqə: HTTP/1.1 302 Tapılan Yer: http:// www.google.co.uk/ Məzmun Növü: mətn/html; charset=UTF-8 Server: gws Məzmun Uzunluğu: 221 Əlaqə: GET-i bağlayın / HTTP/1.1 Host: www.google.co.uk İstifadəçi-Agent: JoeDog/1.00 (X11; I; Siege 2.70) Əlaqə: HTTP/ 1.1 200 OK Məzmun növü: mətn/html; charset=ISO-8859-1 X-XSS-Mühafizə: 1; mode=block Əlaqə: bağlayın
Ancaq Siege həqiqətən yük testi üçün əladır. Apache benchmark kimi ab, o, sayta çoxlu paralel sorğular göndərə və onun trafiki necə idarə etdiyini görə bilər. Aşağıdakı nümunə Google-u 30 saniyə ərzində 20 sorğu ilə necə sınaqdan keçirməyimizi və nəticəni çap etməyimizi göstərir:

$ siege -c20 www.google.co.uk -b -t30s ... Server mühasirəsinin qaldırılması... tamamlandı. Əməliyyatlar: 1400 xit Mövcudluq: 100.00 % Keçən vaxt: 29.22 san. Məlumat ötürüldü: 13.32 MB Cavab müddəti: 0.41 saniyə Əməliyyat sürəti: 47.91 trans/san Ötürmə qabiliyyəti: 0.46 MB/san Uzunmüddətli əməliyyat: Fa.01c est əməliyyat: 4.08 Ən qısa əməliyyat: 0.08
Siege-in ən faydalı xüsusiyyətlərindən biri odur ki, o, təkcə bir ünvanla deyil, həm də fayldan URL-lərin siyahısı ilə işləyə bilir. Bu, yük testi üçün əladır, çünki siz eyni URL-i təkrar-təkrar vurmaq əvəzinə real sayt trafikini simulyasiya edə bilərsiniz. Məsələn, Apache jurnalınızdakı ünvanlardan istifadə edərək serveri yükləmək üçün Siege-dən necə istifadə etmək olar:

$ cut -d " " -f7 /var/log/apache2/access.log > urls.txt $ siege -c -b -f urls.txt
Ngrep
Ciddi trafik təhlili üçün minlərlə parametr, filtr və konfiqurasiya ilə Wireshark var. Komanda xətti versiyası da var şark. Ancaq sadə tapşırıqlar üçün Wireshark-ın funksionallığını lazımsız hesab edirəm. Ona görə də güclü silaha ehtiyacım olmadıqca, . Şəbəkə paketləri ilə eyni şeyi etməyə imkan verir grep fayllarla işləyir.

Veb trafiki üçün demək olar ki, həmişə parametrdən istifadə etmək istəyəcəksiniz -V sətir formatını, eləcə də seçimi qorumaq üçün -q, uyğun olmayan paketlər haqqında lazımsız məlumatları gizlədir. GET və ya POST əmri ilə bütün paketləri kəsən bir nümunə əmri budur:

Ngrep -q -W byline "^(GET|POST) .*"
Siz paketlər üçün əlavə filtr əlavə edə bilərsiniz, məsələn, verilmiş host, IP ünvanı və ya port. Budur, “axtarış” sözünü ehtiva edən 80 nömrəli port, google.com-a və oradan gələn bütün trafik üçün filtr.

Ngrep -q -W byline "axtarış" host www.google.com və port 80