PHP CURL - funktsiyalari va ulardan foydalanish misollari. Buyruqning satrini veb-ishlab chiquvchisining Curl buyruq satri parametrlari uchun vositalari

CURL - buyruq satri yordam dasturi va URL sintaksisidan foydalangan holda ma'lumotlarni uzatish uchun kutubxonadan tashkil topgan dasturiy ta'minot to'plami.

CURL ko'plab protokollarni qo'llab-quvvatlaydi, ular orasida DICT, FILE, FTP, FTPS, Gopher, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMTP, SMTPS, Telnet va TFTP.

Alohida faylni yuklang
Quyidagi buyruq URL-ning tarkibini oladi va uni standart chiqishda (ya'ni terminalda) namoyish etadi.

Curl https://mi-al.ru/\u003e mi-al.htm% Jami% Qabul qilingan% Xferd O'rtacha Tezlik Vaqt Vaqt Vaqt Hozirgi yuk Yuklash Jami sarflangan chap tezlik 100 14378 0 14378 0 0 5387 0 -: -: - - 0:00:02 -: -: - 5387

Faylga cURL chiqishini saqlash
Curl buyrug'ining natijasini -o / -O parametrlari yordamida faylga saqlashimiz mumkin.
  • -o (kichik o) natija buyruq satrida ko'rsatilgan faylda saqlanadi
  • -O (Katta harf O) fayl nomi URL manzilidan olinadi va olingan ma'lumotlarni saqlash uchun ishlatiladi.

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

Gettext.html sahifasi endi 'mygettext.html' nomli faylda saqlanadi. Curl -o opsiyasi bilan bajarilganda, yuklab olish jarayoni satrini quyidagicha aks ettiradi.

% Jami% Qabul qilingan% Xferd O'rtacha Tezlik Vaqt Vaqt Vaqt Hozirgi yuk Yuklash Jami sarflangan chap tezlik 66 1215k 66 805k 0 0 33060 0 0:00:37 0:00:24 0:00:13 45900 100 1215k 100 1215k 0 0 39474 0 0:00:31 0:00:31 -: -: - 68987

Curl -O (katta O) dan foydalanganda, u o'z-o'zidan tarkibni mahalliy mashinada "gettext.html" deb nomlangan faylga saqlaydi.

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

Eslatma: Curl terminalga ma'lumotlarni yozishi kerak bo'lsa, bosilgan ma'lumotlarda chalkashlik bo'lmasligi uchun u harakat satrini o'chiradi. Natijalarni faylga uzatish uchun biz '\u003e' | '-o' | '-O' parametrlaridan foydalanishimiz mumkin.

Bir vaqtning o'zida bir nechta fayllarni olish
Buyruqlar satrida barcha URL-larni ko'rsatib, bir vaqtning o'zida bir nechta fayllarni yuklab olishimiz mumkin.

Curl -O URL1 -O URL2

Quyidagi buyruq ikkala index.html va gettext.html fayllarini yuklab olib, ularni shu kataloglarda joriy katalogda saqlaydi.

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

Yuqorida ko'rsatilgandek, bitta serverdan bir nechta faylni yuklab olganimizda, curl ulanishni qayta ishlatishga urinishini unutmang.

-L opsiyasi bilan HTTP Manzil sarlavhalarini bajaring
Odatiy bo'lib, CURL HTTP Manzil sarlavhalarini (qayta yo'naltirishlarni) ta'qib qilmaydi. So'ralgan veb-sahifa boshqa joyga ko'chirilganda, tegishli javob HTTP Manzil sarlavhalarida yuboriladi.
Masalan, kimdir o'z mamlakatidan brauzer satriga google.com-ni yozganda, ular avtomatik ravishda "google.co.xx" ga yo'naltiriladi. Bu quyida ko'rsatilgan HTTP joylashuvi sarlavhasi asosida amalga oshiriladi.

Curl https://www.google.com/?gws_rd\u003dssl

302 ko'chirildi

302 ko'chirildi

Hujjat bu erga ko'chib o'tdi.

Yuqoridagi natijada so'ralgan hujjat "

Mehmonlardan yashiringan

.
Quyidagi ko'rsatilgandek -L parametridan foydalanib, yo'naltirishlarni kuzatib boring. Endi html manba kodi yuklab olinadi

Mehmonlardan yashiringan

.

Curl -L https://www.google.com/?gws_rd\u003dssl

Oldingi yuklab olishni davom ettirish

-C parametridan foydalanib, biron sababga ko'ra to'xtatilgan yuklab olishni davom ettirishingiz mumkin. Bu katta hajmdagi fayllarni yuklab olish to'xtatilganda foydali bo'ladi.
Agar biz "-C -" deb aytsak, curl yuklab olishni davom ettirishni qidiradi. Shuningdek, biz "-C" ni belgilashimiz mumkin<смещение>”. Belgilangan bayt ofset manba faylining boshidan o'tkazib yuboriladi.
Curl yordamida katta yuklashni boshlang va yuklab olish o'rtasida to'xtatish uchun Ctrl-C tugmachasini bosing.

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

Yuklab olish 20,1% da to'xtatildi. "Curl -C -" yordamida biz to'xtagan joydan yuklab olishni davom ettirishimiz mumkin. Yuklash endi 20,1% dan davom etadi.

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

Ma'lumotlar tezligini cheklash
Ma'lumot uzatish tezligini –limit-tarif opsiyasi bilan cheklashingiz mumkin. Siz maksimal tezlikni argument sifatida o'tkazishingiz mumkin.

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

Yuqoridagi buyruq uzatish tezligini 1000 bayt / soniya bilan cheklaydi. curl eng yuqori tezlikda ishlatishi mumkin. Ammo o'rtacha tezlik 1000 bayt / soniyani tashkil qiladi.
Quyida yuqoridagi buyruqning bajarilish satri keltirilgan. Hozirgi tezlik 1000 bayt atrofida ekanligini ko'rishingiz mumkin.

% Jami% Qabul qilingan% Xferd O'rtacha Tezlik Vaqt Vaqt Vaqt Hozirgi yuk Yuklash Jami sarflangan chap tezlik 1 1215k 1 13601 0 0 957 0 0:21:40 0:00:14 0:21:26 999 1 1215k 1 14601 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

Faylni faqat belgilangan vaqtdan oldin / keyin o'zgartirilgan bo'lsa, yuklang
Burish uchun -z parametridan foydalanib, ma'lum vaqtdan so'ng o'zgargan fayllarni olishingiz mumkin. Bu FTP va HTTP uchun ishlaydi.

Yuqoridagi buyruq yy.html-ni faqat belgilangan sana va soatdan kechroq o'zgargan taqdirdagina yuklaydi.

Yuqoridagi buyruq file.html faylini belgilangan sana va soatdan oldin o'zgartirilgan bo'lsa yuklaydi. Sana iboralari uchun qo'llab-quvvatlanadigan turli sintaksislar haqida ko'proq bilish uchun "man curl_getdate" yozing.

CURL-da HTTP autentifikatsiyasidan o'tish
Ba'zan veb-saytlar tarkibini ko'rish uchun foydalanuvchi nomi va parolni talab qiladi. -U opsiyasi yordamida siz ushbu hisob ma'lumotlarini quyida ko'rsatilgandek cURL-dan veb-serverga o'tkazishingiz mumkin.

$ curl -u foydalanuvchi nomi: URL paroli

Eslatma: Odatiy ravishda curl asosiy HTTP autentifikatsiyasidan foydalanadi. -Ntlm | yordamida boshqa autentifikatsiya usullarini belgilashimiz mumkin - Eng zo'r.


cURL fayllarni FTP serverlaridan yuklab olish uchun ham ishlatilishi mumkin. Agar ko'rsatilgan FTP yo'li katalog bo'lsa, unda sukut bo'yicha undagi fayllar ro'yxati ko'rsatiladi.

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

Yuqoridagi buyruq xss.php faylini ftp serveridan yuklab olib, mahalliy katalogingizda saqlaydi.

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

Bu erda URL katalogga ishora qiladi. Shuning uchun, cURL berilgan URL manzilidagi fayllar va kataloglarni ro'yxatlaydi.


CURL URL oralig'ini qo'llab-quvvatlaydi. Agar diapazon berilsa, shu doiradagi tegishli fayllar yuklanadi. Bu FTP oyna saytlaridan paketlarni yuklab olishda foydali bo'ladi.

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

Yuqoridagi buyruq terminaldagi a-z oralig'idagi barcha paketlarni sanab beradi.

Fayllarni FTP-serverga yuklash
Curl -T opsiyasi bilan FTP-serverga yuklash uchun ham ishlatilishi mumkin.

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

Yuqoridagi buyruq myfile.txt nomli faylni FTP-serverga yuklaydi. Shuningdek, diapazonlar yordamida bir vaqtning o'zida bir nechta fayllarni yuklashingiz mumkin.

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

Ixtiyoriy ravishda biz "" dan foydalanishimiz mumkin. stdin-dan olish va uzoqdagi mashinaga yuborish.

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

Yuqoridagi buyruq foydalanuvchidan standart kirishdan olingan natijani oladi va tarkibini "myfile_1.txt" nomi ostida ftp-serverga saqlaydi.
Siz har bir URL uchun "-T" ni o'rnatishingiz mumkin va har bir fayl manzili juftligi nimani yuklash kerakligini aniqlaydi

Ko'proq so'zlashuv va kuzatuv opsiyasi bilan ko'proq ma'lumot
-V opsiyasi yordamida nima sodir bo'layotganini bilib olishingiz mumkin. -V varianti og'zaki rejimni yoqadi va tafsilotlarni chop etadi.

Curl -v https://www.google.co.th/?gws_rd\u003dssl

Yuqoridagi buyruq quyidagilarni beradi

* Qayta qurilgan URL manzili: https://www.google.co.th/?gws_rd\u003dssl * DNS keshidan xost nomi topilmadi * 27.123.17.49 urinib ko'ring ... * www.google.co.th (27.123.) Ga ulangan. 17.49) port 80 (# 0)\u003e GET / HTTP / 1.1\u003e User-Agent: curl / 7.38.0\u003e Xost: www.google.co.th\u003e Qabul qilish: * / *\u003e< 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 ... ... ...

Agar sizga batafsil ma'lumot kerak bo'lsa, u holda –trace opsiyasidan foydalanishingiz mumkin. –Trace opsiyasi ko'rsatilgan fayl uchun barcha kiruvchi / chiquvchi ma'lumotlarni to'liq kuzatib borish imkoniyatini beradi



CURL - buyruq satri yordam dasturi va URL sintaksisidan foydalangan holda ma'lumotlarni uzatish uchun kutubxonadan tashkil topgan dasturiy ta'minot to'plami.

CURL ko'plab protokollarni qo'llab-quvvatlaydi, ular orasida DICT, FILE, FTP, FTPS, Gopher, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMTP, SMTPS, Telnet va TFTP.

Alohida faylni yuklang
Quyidagi buyruq URL-ning tarkibini oladi va uni standart chiqishda (ya'ni terminalda) namoyish etadi.

Curl https://mi-al.ru/\u003e mi-al.htm% Jami% Qabul qilingan% Xferd O'rtacha Tezlik Vaqt Vaqt Vaqt Hozirgi yuk Yuklash Jami sarflangan chap tezlik 100 14378 0 14378 0 0 5387 0 -: -: - - 0:00:02 -: -: - 5387

Faylga cURL chiqishini saqlash
Curl buyrug'ining natijasini -o / -O parametrlari yordamida faylga saqlashimiz mumkin.
  • -o (kichik o) natija buyruq satrida ko'rsatilgan faylda saqlanadi
  • -O (Katta harf O) fayl nomi URL manzilidan olinadi va olingan ma'lumotlarni saqlash uchun ishlatiladi.

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

Gettext.html sahifasi endi 'mygettext.html' nomli faylda saqlanadi. Curl -o opsiyasi bilan bajarilganda, yuklab olish jarayoni satrini quyidagicha aks ettiradi.

% Jami% Qabul qilingan% Xferd O'rtacha Tezlik Vaqt Vaqt Vaqt Hozirgi yuk Yuklash Jami sarflangan chap tezlik 66 1215k 66 805k 0 0 33060 0 0:00:37 0:00:24 0:00:13 45900 100 1215k 100 1215k 0 0 39474 0 0:00:31 0:00:31 -: -: - 68987

Curl -O (katta O) dan foydalanganda, u o'z-o'zidan tarkibni mahalliy mashinada "gettext.html" deb nomlangan faylga saqlaydi.

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

Eslatma: Curl terminalga ma'lumotlarni yozishi kerak bo'lsa, bosilgan ma'lumotlarda chalkashlik bo'lmasligi uchun u harakat satrini o'chiradi. Natijalarni faylga uzatish uchun biz '\u003e' | '-o' | '-O' parametrlaridan foydalanishimiz mumkin.

Bir vaqtning o'zida bir nechta fayllarni olish
Buyruqlar satrida barcha URL-larni ko'rsatib, bir vaqtning o'zida bir nechta fayllarni yuklab olishimiz mumkin.

Curl -O URL1 -O URL2

Quyidagi buyruq ikkala index.html va gettext.html fayllarini yuklab olib, ularni shu kataloglarda joriy katalogda saqlaydi.

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

Yuqorida ko'rsatilgandek, bitta serverdan bir nechta faylni yuklab olganimizda, curl ulanishni qayta ishlatishga urinishini unutmang.

-L opsiyasi bilan HTTP Manzil sarlavhalarini bajaring
Odatiy bo'lib, CURL HTTP Manzil sarlavhalarini (qayta yo'naltirishlarni) ta'qib qilmaydi. So'ralgan veb-sahifa boshqa joyga ko'chirilganda, tegishli javob HTTP Manzil sarlavhalarida yuboriladi.
Masalan, kimdir o'z mamlakatidan brauzer satriga google.com-ni yozganda, ular avtomatik ravishda "google.co.xx" ga yo'naltiriladi. Bu quyida ko'rsatilgan HTTP joylashuvi sarlavhasi asosida amalga oshiriladi.

Curl https://www.google.com/?gws_rd\u003dssl

302 ko'chirildi

302 ko'chirildi

Hujjat bu erga ko'chib o'tdi.

Yuqoridagi natijada so'ralgan hujjat "

Mehmonlardan yashiringan

.
Quyidagi ko'rsatilgandek -L parametridan foydalanib, yo'naltirishlarni kuzatib boring. Endi html manba kodi yuklab olinadi

Mehmonlardan yashiringan

.

Curl -L https://www.google.com/?gws_rd\u003dssl

Oldingi yuklab olishni davom ettirish

-C parametridan foydalanib, biron sababga ko'ra to'xtatilgan yuklab olishni davom ettirishingiz mumkin. Bu katta hajmdagi fayllarni yuklab olish to'xtatilganda foydali bo'ladi.
Agar biz "-C -" deb aytsak, curl yuklab olishni davom ettirishni qidiradi. Shuningdek, biz "-C" ni belgilashimiz mumkin<смещение>”. Belgilangan bayt ofset manba faylining boshidan o'tkazib yuboriladi.
Curl yordamida katta yuklashni boshlang va yuklab olish o'rtasida to'xtatish uchun Ctrl-C tugmachasini bosing.

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

Yuklab olish 20,1% da to'xtatildi. "Curl -C -" yordamida biz to'xtagan joydan yuklab olishni davom ettirishimiz mumkin. Yuklash endi 20,1% dan davom etadi.

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

Ma'lumotlar tezligini cheklash
Ma'lumot uzatish tezligini –limit-tarif opsiyasi bilan cheklashingiz mumkin. Siz maksimal tezlikni argument sifatida o'tkazishingiz mumkin.

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

Yuqoridagi buyruq uzatish tezligini 1000 bayt / soniya bilan cheklaydi. curl eng yuqori tezlikda ishlatishi mumkin. Ammo o'rtacha tezlik 1000 bayt / soniyani tashkil qiladi.
Quyida yuqoridagi buyruqning bajarilish satri keltirilgan. Hozirgi tezlik 1000 bayt atrofida ekanligini ko'rishingiz mumkin.

% Jami% Qabul qilingan% Xferd O'rtacha Tezlik Vaqt Vaqt Vaqt Hozirgi yuk Yuklash Jami sarflangan chap tezlik 1 1215k 1 13601 0 0 957 0 0:21:40 0:00:14 0:21:26 999 1 1215k 1 14601 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

Faylni faqat belgilangan vaqtdan oldin / keyin o'zgartirilgan bo'lsa, yuklang
Burish uchun -z parametridan foydalanib, ma'lum vaqtdan so'ng o'zgargan fayllarni olishingiz mumkin. Bu FTP va HTTP uchun ishlaydi.

Yuqoridagi buyruq yy.html-ni faqat belgilangan sana va soatdan kechroq o'zgargan taqdirdagina yuklaydi.

Yuqoridagi buyruq file.html faylini belgilangan sana va soatdan oldin o'zgartirilgan bo'lsa yuklaydi. Sana iboralari uchun qo'llab-quvvatlanadigan turli sintaksislar haqida ko'proq bilish uchun "man curl_getdate" yozing.

CURL-da HTTP autentifikatsiyasidan o'tish
Ba'zan veb-saytlar tarkibini ko'rish uchun foydalanuvchi nomi va parolni talab qiladi. -U opsiyasi yordamida siz ushbu hisob ma'lumotlarini quyida ko'rsatilgandek cURL-dan veb-serverga o'tkazishingiz mumkin.

$ curl -u foydalanuvchi nomi: URL paroli

Eslatma: Odatiy ravishda curl asosiy HTTP autentifikatsiyasidan foydalanadi. -Ntlm | yordamida boshqa autentifikatsiya usullarini belgilashimiz mumkin - Eng zo'r.


cURL fayllarni FTP serverlaridan yuklab olish uchun ham ishlatilishi mumkin. Agar ko'rsatilgan FTP yo'li katalog bo'lsa, unda sukut bo'yicha undagi fayllar ro'yxati ko'rsatiladi.

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

Yuqoridagi buyruq xss.php faylini ftp serveridan yuklab olib, mahalliy katalogingizda saqlaydi.

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

Bu erda URL katalogga ishora qiladi. Shuning uchun, cURL berilgan URL manzilidagi fayllar va kataloglarni ro'yxatlaydi.


CURL URL oralig'ini qo'llab-quvvatlaydi. Agar diapazon berilsa, shu doiradagi tegishli fayllar yuklanadi. Bu FTP oyna saytlaridan paketlarni yuklab olishda foydali bo'ladi.

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

Yuqoridagi buyruq terminaldagi a-z oralig'idagi barcha paketlarni sanab beradi.

Fayllarni FTP-serverga yuklash
Curl -T opsiyasi bilan FTP-serverga yuklash uchun ham ishlatilishi mumkin.

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

Yuqoridagi buyruq myfile.txt nomli faylni FTP-serverga yuklaydi. Shuningdek, diapazonlar yordamida bir vaqtning o'zida bir nechta fayllarni yuklashingiz mumkin.

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

Ixtiyoriy ravishda biz "" dan foydalanishimiz mumkin. stdin-dan olish va uzoqdagi mashinaga yuborish.

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

Yuqoridagi buyruq foydalanuvchidan standart kirishdan olingan natijani oladi va tarkibini "myfile_1.txt" nomi ostida ftp-serverga saqlaydi.
Siz har bir URL uchun "-T" ni o'rnatishingiz mumkin va har bir fayl manzili juftligi nimani yuklash kerakligini aniqlaydi

Ko'proq so'zlashuv va kuzatuv opsiyasi bilan ko'proq ma'lumot
-V opsiyasi yordamida nima sodir bo'layotganini bilib olishingiz mumkin. -V varianti og'zaki rejimni yoqadi va tafsilotlarni chop etadi.

Curl -v https://www.google.co.th/?gws_rd\u003dssl

Yuqoridagi buyruq quyidagilarni beradi

* Qayta qurilgan URL manzili: https://www.google.co.th/?gws_rd\u003dssl * DNS keshidan xost nomi topilmadi * 27.123.17.49 urinib ko'ring ... * www.google.co.th (27.123.) Ga ulangan. 17.49) port 80 (# 0)\u003e GET / HTTP / 1.1\u003e User-Agent: curl / 7.38.0\u003e Xost: www.google.co.th\u003e Qabul qilish: * / *\u003e< 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 ... ... ...

Agar sizga batafsil ma'lumot kerak bo'lsa, u holda –trace opsiyasidan foydalanishingiz mumkin. –Trace opsiyasi ko'rsatilgan fayl uchun barcha kiruvchi / chiquvchi ma'lumotlarni to'liq kuzatib borish imkoniyatini beradi



Men PHP dasturlash tili haqida bir oz gaplashishni va xususan kengaytma mavzusiga to'xtalishni taklif qilaman JURL, ya'ni PHP skriptining o'zida turli xil protokollardan foydalangan holda turli xil serverlar bilan o'zaro aloqada bo'lish qobiliyati.

Curl-ga o'tishdan oldin, biz PHP tilida, masalan, PHP-da Excel-ga yuklash yoki PHP-da autentifikatsiya qilish mumkinligi haqida materiallarda to'xtalib o'tganligimizni eslatib qo'ymoqchiman va endi PHP-ga so'rov yuborish imkoniyati to'g'risida gaplashamiz.

CURL nima?

JURL PHP funktsiyalarining kutubxonasi, bu PHP skriptidan HTTP kabi so'rovlarni yuborish uchun ishlatilishi mumkin. CURL HTTP, HTTPS, FTP va boshqalar kabi protokollarni qo'llab-quvvatlaydi. GET, POST, PUT usullari yordamida HTTP so'rovlarini yuborishingiz mumkin.

Masofaviy skriptni chaqirish va natijani olish yoki shunchaki chaqirilgan sahifaning HTML kodini saqlash kerak bo'lgan hollarda CURL foydali bo'lishi mumkin, umuman, har kim o'z dasturini topishi mumkin, ammo asosiysi shundaki, buyruq faylini bajarish paytida siz so'rov yuborishingiz mumkin.

PHP-da CURL kutubxonasini ulash

CURL kutubxonasidan foydalanish uchun uni mos ravishda ulash lozim.

Eslatma! Masalan, biz Windows 7 da PHP 5.4.39 dan foydalanamiz va veb-server sifatida Apache 2.2.22 dan foydalanamiz.

Birinchi narsa - kutubxonalarni nusxalash ssleay32.dll, libeay32.dll, libssh2.dll ular PHP katalogida, Windows tizim katalogida joylashgan, ya'ni C: \\ Windows \\ System32.

Keyin php_curl.dll kutubxonasini php.ini-ga ulang, ya'ni. quyidagi qatorga izoh bermang

Kutubxona ulanmagan

kengaytma \u003d php_curl.dll

Kutubxona ulangan

Kengaytma \u003d php_curl.dll

Mana, Apache-ni qayta ishga tushiring, phpinfo () funktsiyasini chaqiring va ulanish muvaffaqiyatli bo'lsa, sizda jingalak qism bo'lishi kerak


Agar u erda yo'q bo'lsa, demak, bu kutubxonaning yuklamaganligini anglatadigan bitta narsani anglatadi, buning eng keng tarqalgan sababi yuqoridagi DLL-larning Windows tizim katalogiga ko'chirilmaganligi edi.

CURL misoli - uzoq sahifani ko'rsatishni so'rash

Ushbu misolda biz shunchaki GET usulidan foydalangan holda HTTP protokoli yordamida uzoqdagi sahifani talab qilamiz va uning tarkibini ekranda namoyish qilamiz.

Bizda 2 ta PHP fayli test_curl.php va test.php mavjud, bu erda test_curl.php - bu biz foydalanadigan skript va test.php - biz chaqiradigan masofaviy skript. Kodni batafsil sharhladim.

Test_curl.php kodi

Test.php kodi

Sarlavha 1"; break; 2-holat: echo"<Н2>2-sarlavha"; break; 3 holat: echo"<Н3>3-sarlavha"; break;))?\u003e

Natijada, agar siz test_curl.php-ni ishlatsangiz, ekranda "1-sarlavha" yozuvini ko'rasiz, siz id parametrlarini o'tkazishda tajriba qilishingiz mumkin ( bu holda 2 yoki 3).

CURL misoli - masofaviy skriptni chaqirish va natijani olish

Keling, keyinroq ishlov berish uchun skriptni chaqirishga va natijani olishga harakat qilaylik, masalan, POST usulidan foydalanamiz. Fayl nomlarini bir xil qoldiring.

Test_curl.php kodi

Test.php kodi

Va agar biz test_curl.php-ni ishlatsak, u holda ekranda 111 ko'rsatiladi, ya'ni. 1.11 masofaviy skriptga qo'ng'iroqning natijasi 100 ga ko'paytirildi.

Endi funktsiyalar va ularga tegishli konstantalar haqida to'xtalamiz.

Tez-tez ishlatiladigan CURL funktsiyalari va doimiylari

  • curl_init - sessiyani boshlaydi;
  • curl_close - sessiyani tugatish;
  • curl_exec - so'rovni bajaradi;
  • curl_errno - Xato kodini qaytaradi;
  • curl_setopt - Seans uchun parametrni o'rnatadi, masalan:
    • CURLOPT_HEADER - qiymat 1 sarlavhalarni qaytarish kerakligini anglatadi;
    • CURLOPT_INFILESIZE - kutilayotgan fayl hajmini aniqlash uchun parametr;
    • CURLOPT_VERBOSE - 1 qiymati CURL tomonidan bajarilgan barcha operatsiyalar to'g'risida batafsil xabarlarni chop etishini anglatadi;
    • CURLOPT_NOPROGRESS - operatsiyani bajarish ko'rsatkichini o'chirib qo'ying, qiymati 1;
    • CURLOPT_NOBODY - agar sizga hujjat kerak bo'lmasa, lekin faqat sarlavhalar kerak bo'lsa, unda qiymatni 1 ga qo'ying;
    • CURLOPT_UPLOAD - faylni serverga yuklash;
    • CURLOPT_POST - POST usuli yordamida so'rovni bajarish;
    • CURLOPT_FTPLISTONLY - FTP server katalogidagi fayllar ro'yxatini olish, qiymati 1;
    • CURLOPT_PUT - so'rovni PUT usuli yordamida bajarish, qiymati 1;
    • CURLOPT_RETURNTRANSFER - natijani brauzerga chiqmasdan qaytarish, qiymati 1;
    • CURLOPT_TIMEOUT bajarilishning soniya bo'yicha maksimal vaqti;
    • CURLOPT_URL - aloqa uchun manzilni ko'rsatish;
    • CURLOPT_USERPWD - foydalanuvchi nomi va parol bilan quyidagi qatorda satr :;
    • CURLOPT_POSTFIELDS - POST so'rovi uchun ma'lumotlar;
    • CURLOPT_REFERER - "Referer:" HTTP sarlavhasi qiymatini o'rnatadi;
    • CURLOPT_USERAGENT - "User-Agent:" HTTP sarlavhasi qiymatini o'rnatadi;
    • CURLOPT_COOKIE - HTTP so'rovi bilan yuboriladigan "Cookie:" sarlavhasining mazmuni;
    • CURLOPT_SSLCERT- PEM formatidagi sertifikat bilan fayl nomi;
    • CURLOPT_SSL_VERIFYPEER - masofaviy server sertifikatini tekshirishni o'chirish uchun 0 qiymati (standart 1);
    • CURLOPT_SSLCERTPASSWD - sertifikat fayli uchun parol.
  • curl_getinfo - Amaliyot haqida ma'lumotni qaytaradi, ikkinchi parametr aynan nimani ko'rsatish kerakligini ko'rsatish uchun doimiy bo'lishi mumkin, masalan:
    • CURLINFO_EFFECTIVE_URL Oxirgi ishlatilgan URL;
    • CURLINFO_HTTP_CODE Oxirgi qabul qilingan HTTP kodi;
    • CURLINFO_FILETIME - yuklangan hujjatning o'zgartirish sanasi;
    • CURLINFO_TOTAL_TIME - ishlash vaqti sekundlarda;
    • CURLINFO_NAMELOOKUP_TIME - server nomini echish vaqti sekundlarda;
    • CURLINFO_CONNECT_TIME - ulanishni o'rnatish uchun vaqt, soniyalarda;
    • CURLINFO_PRETRANSFER_TIME - operatsiya boshlanishidan ma'lumotlarni uzatishga tayyor bo'lgunga qadar o'tgan vaqt, soniyalar ichida;
    • CURLINFO_STARTTRANSFER_TIME - operatsiya boshlangandan birinchi ma'lumotlar bayti o'tkazilgan paytgacha o'tgan vaqt, soniyalar ichida;
    • CURLINFO_REDIRECT_TIME - qayta yo'naltirishga sarflangan vaqt, soniyalar ichida;
    • CURLINFO_SIZE_UPLOAD - yuklashda bayt soni;
    • CURLINFO_SIZE_DOWNLOAD - yuklashda baytlar soni;
    • CURLINFO_SPEED_DOWNLOAD - o'rtacha yuklab olish tezligi;
    • CURLINFO_SPEED_UPLOAD - o'rtacha yuklab olish tezligi;
    • CURLINFO_HEADER_SIZE - qabul qilingan barcha sarlavhalarning umumiy hajmi;
    • CURLINFO_REQUEST_SIZE - barcha yuborilgan so'rovlarning umumiy hajmi;
    • CURLINFO_SSL_VERIFYRESULT - CURLOPT_SSL_VERIFYPEER parametrini o'rnatish orqali so'ralgan SSL sertifikatini tekshirish natijasi;
    • CURLINFO_CONTENT_LENGTH_DOWNLOAD - yuklangan hujjatning hajmi, Content-Length sarlavhasidan o'qiladi;
    • CURLINFO_CONTENT_LENGTH_UPLOAD - yuklangan ma'lumotlar hajmi;
    • CURLINFO_CONTENT_TYPE - olingan kontent tipidagi sarlavha yoki ushbu sarlavha olinmagan holatda NULL.

PHP-ning rasmiy veb-saytidan CURL funktsiyalari va ularga tegishli konstantalar haqida ko'proq ma'lumot olishingiz mumkin -

Veb-dasturchining hayoti murakkablik bilan qoplanadi. Ushbu asoratlarning manbai noma'lum bo'lganida, ayniqsa, asabiylashadi. So'rov yuborishda, javob berishda yoki uchinchi tomon kutubxonasida muammo bormi yoki tashqi API buggymi? Bizning hayotimizni engillashtiradigan turli xil vositalar mavjud. Shaxsan men bebaho deb biladigan ba'zi buyruq satrlari vositalari.

jURL
cURL - bu wget kabi har xil protokollar orqali ma'lumotlarni uzatish dasturi. Asosiy farq shundaki, sukut bo'yicha wget faylga saqlaydi va buyruq satriga cURL natijalarini chiqaradi. Bu veb-sayt tarkibini ko'rishni juda osonlashtiradi. Masalan, joriy tashqi IP-ni tezda qanday olish mumkin:

$ curl ifconfig.me 93.96.141.93
Tanlovlar -i (sarlavhalarni ko'rsatish) va Men (faqat sarlavhalarni ko'rsatish) cURL-ni HTTP javoblarini disk raskadrovka qilish va server sizga nima yuborayotganini tahlil qilish uchun ajoyib vosita qiladi:

$ curl -I habrahabr.ru HTTP / 1.1 200 OK Server: nginx Sana: Psh, 18.08.2011 14:15:36 GMT Content-Type: text / html; charset \u003d utf-8 Ulanish: tirik tuting Keep-tirik: vaqt tugashi \u003d 25
Parametr -L foydali bo'lsa ham, bu yo'naltirishlarni avtomatik ravishda kuzatib boradi. cURL HTTP autentifikatsiyasini, cookies fayllarini, HTTP proksi-server orqali tunnelni, qo'lda sarlavha sozlamalarini va boshqa ko'p narsalarni qo'llab-quvvatlaydi.

Qamal
Qamal yukni sinovdan o'tkazish vositasidir. Bundan tashqari, bu qulay variantga ega -gbu juda o'xshash jingalak - iLbalki sizga http so'rovining sarlavhalarini ham ko'rsatadi. Bu erda google.com saytidan bir misol (ba'zi sarlavhalar qisqartirilganligi uchun olib tashlangan):

$ siege -g www.google.com Get / HTTP / 1.1 Xost: www.google.com Foydalanuvchi-Agent: JoeDog / 1.00 (X11; I; Siege 2.70) Ulanish: HTTP / 1.1 ni yoping 302 Topilgan joy: http: // www.google.co.uk/ Tarkib turi: text / html; charset \u003d UTF-8 Server: gws Tarkib uzunligi: 221 Ulanish: yoping GET / HTTP / 1.1 Xost: www.google.co.uk Foydalanuvchi-agent: JoeDog / 1.00 (X11; I; Siege 2.70) Ulanish: HTTP-ni yopish / 1.1 200 OK Tarkib turi: text / html; charset \u003d ISO-8859-1 X-XSS-Protection: 1; rejim \u003d blok Ulanish: yopish
Ammo qamal uchun eng zo'r narsa yuklarni sinovdan o'tkazishdir. Apache ko'rsatkichi kabi ab, u saytga bir vaqtning o'zida ko'plab so'rovlarni yuborishi va trafikni qanday boshqarishini ko'rishi mumkin. Quyidagi misol Google-ni 30 soniya davomida 20 ta so'rov bilan qanday sinovdan o'tkazganimizni ko'rsatadi, undan so'ng natija ko'rsatiladi:

$ siege -c20 www.google.co.uk -b -t30s ... Server qamalini ko'tarish ... bajarildi. Tranzaksiyalar: 1400 xit Mavjudligi: 100.00% O'tgan vaqt: 29.22 soniya O'tkazilgan ma'lumotlar: 13.32 MB Javob berish vaqti: 0.41 sek. Tranzaksiya tezligi: 47.91 trans / sek O'tkazish: 0.46 MB / sek Muvofiqlik: 19.53 Muvaffaqiyatli operatsiyalar: 1400 Xatoliklar: 0 Eng uzun operatsiya: 4.08 Eng qisqa operatsiya: 0.08
Siege-ning eng foydali xususiyatlaridan biri shundaki, u nafaqat bitta manzil bilan, balki fayldagi URL-lar ro'yxati bilan ham ishlashi mumkin. Bu yuklarni sinash uchun juda yaxshi, chunki siz bir xil URL manzilini qayta-qayta urishdan ko'ra, saytingizdagi haqiqiy trafikni simulyatsiya qilishingiz mumkin. Masalan, Apache jurnalingizdagi manzillardan foydalangan holda serverni yuklash uchun Siege-dan qanday foydalanish kerak:

$ cut -d "" -f7 /var/log/apache2/access.log\u003e urls.txt $ siege -c -b -f urls.txt
Ngrep
Trafikni jiddiy tahlil qilish uchun minglab sozlamalar, filtrlar va konfiguratsiyalarga ega Wireshark mavjud. Buyruq satrining versiyasi ham mavjud tshark... Ammo oddiy vazifalar uchun men Wireshark funksiyasini ortiqcha deb hisoblayman. Menga kuchli qurol kerak emas ekan, men foydalanaman. Bu sizga xuddi shu narsani tarmoq paketlari bilan bajarishga imkon beradi grep fayllar bilan ishlaydi.

Veb-trafik uchun deyarli har doim parametrdan foydalanishni xohlaysiz -Wqatorni formatlashni va variantni saqlab qolish uchun -q, bu yaroqsiz paketlar haqida ortiqcha ma'lumotlarni yashiradi. GET yoki POST buyrug'i bilan barcha paketlarni ushlab turuvchi buyruqning misoli:

Ngrep -q -W "^ (GET | POST). *" Qatori.
Siz paketlar uchun qo'shimcha filtr qo'shishingiz mumkin, masalan, berilgan xost, IP-manzil yoki port orqali. Bu erda "qidirish" so'zini o'z ichiga olgan port 80, google.com ga kiruvchi va chiquvchi barcha trafik uchun filtr mavjud.

Ngrep -q -W byline liniyasi "qidirish" www.google.com va port 80

Haqiqiy amaliy misol: IP-manzilni o'zgartirish uchun yo'riqchini (modem) qayta yoqishingiz kerak. Buning uchun sizga kerak: yo'riqchiga kiring, parvarishlash sahifasiga o'ting va "Qayta boshlash" tugmasini bosing. Agar ushbu harakatni bir necha marta bajarish kerak bo'lsa, protsedurani takrorlash kerak. Qabul qiling, siz ushbu tartibni har safar qo'lda qilishni xohlamaysiz. cURL bularning barchasini avtomatlashtirishga imkon beradi. Faqat bir nechta cURL buyruqlari bilan siz avtorizatsiya va yo'riqnoma ustida vazifalarni bajarishga erishishingiz mumkin.

  • cURL buyruq satridagi veb-saytlardan ma'lumotlarni olish uchun qulay.
Yana bir amaliy misol: biz bir nechta saytlar uchun umumiy statistik ma'lumotlarni namoyish qilishni xohlaymiz. Agar biz cURLdan foydalansak, u holda bu juda ahamiyatsiz vazifaga aylanadi: biz cURL yordamida biz statistik ma'lumotlarni yig'ish xizmatida autentifikatsiyadan o'tamiz (agar kerak bo'lsa), keyin (yana cURL buyruqlari bilan) kerakli sahifalarni olamiz, kerakli ma'lumotlarni tahlil qilamiz; protsedura barcha saytlarimiz uchun takrorlanadi, so'ngra biz yakuniy natijani qo'shamiz va namoyish qilamiz.

O'sha. CURL-dan foydalanish holatlari juda haqiqiydir, ammo aksariyat hollarda cURL uni o'z dasturlari uchun ishlatadigan dasturchilarga kerak.

CURL ko'plab protokollarni va avtorizatsiya usullarini qo'llab-quvvatlaydi, fayllarni uzata oladi, cookie fayllari bilan to'g'ri ishlaydi, SSL sertifikatlari, proksi-serverlarini va boshqa ko'p narsalarni qo'llab-quvvatlaydi.

pHP va buyruq satrida cURL

Biz cURL-ni ikkita asosiy usulda ishlatishimiz mumkin: PHP-skriptlarida va buyruq satrida.

Serverda PHP-da cURL-ni yoqish uchun php.ini faylidagi satrni o'chirib tashlashingiz kerak

Kengaytma \u003d php_curl.dll

Va keyin serverni qayta yoqing.

Linuxda siz curl paketini o'rnatishingiz kerak.

Debian, Ubuntu yoki Linux Mint-da:

$ sudo apt-get install curl


Fedora, CentOS yoki RHEL-da:

$ sudo yum install curl

PHP-da va buyruq satrida foydalanishdagi farqni aniq ko'rish uchun biz bir xil vazifalarni ikki marta bajaramiz: avval PHP skriptida, so'ngra buyruq satrida. Biz chalg'itmaslikka harakat qilamiz.

Ma'lumotlarni cURL bilan olish

PHP-da cURL yordamida ma'lumot olish

PHP misoli:

Hammasi juda oddiy:
$ target_url - bizni qiziqtirgan sayt manzili. Sayt manzilidan keyin siz ikkita nuqta qo'yishingiz va port manzilini qo'shishingiz mumkin (agar port standartnikidan farq qiladigan bo'lsa).

jasur_init - yangi seansni ishga tushiradi va bizning misolimizda o'zgaruvchiga tayinlangan tavsiflovchini qaytaradi $ ch.

Keyin funktsiya bilan cURL so'rovini bajaramiz curl_exec, unga parametr sifatida tavsiflovchi uzatiladi.

Hammasi juda mantiqiy, ammo ushbu skript amalga oshirilganda bizning saytimizda sayt tarkibi ko'rsatiladi. Agar biz tarkibni namoyish qilishni xohlamasak, lekin uni o'zgaruvchiga yozishni xohlasak (keyingi ishlov berish yoki tahlil qilish uchun).

Stsenariyni biroz qo'shaylik:

0) (echo "Curl error:". Curl_error ($ ch);) curl_close ($ ch); ?\u003e

Bizda chiziq bor curl_setopt ($ ch, CURLOPT_RETURNTRANSFER, 1);.

curl_setopt - variantlarni o'rnatadi. Variantlarning to'liq ro'yxatini ushbu sahifada topishingiz mumkin:

Mehmonlardan yashiringan

$ response_data \u003d curl_exec ($ ch);

Endi ssenariyning qiymati $ response_data o'zgaruvchisiga beriladi, bu bilan keyingi operatsiyalarni bajarish mumkin. Masalan, uning tarkibini namoyish qilishingiz mumkin.

Tikish

If (curl_errno ($ ch)\u003e 0) (echo "Curl error:". Curl_error ($ ch);)

xatolar bo'lsa, disk raskadrovka uchun xizmat qiladi.

Buyruqning satrida cURL bilan ma'lumotlarni olish

Buyruqning satriga yozing

qaerda o'rniga mi-al.ru - saytingiz manzili.

Agar siz ma'lumotni o'zgaruvchiga nusxalashingiz kerak va natijani ekranda ko'rsatmasangiz, biz buni qilamiz:

Temp \u003d "curl mi-al.ru"

Bunday holda, ba'zi ma'lumotlar hali ham ko'rsatiladi:

Ularning ko'rinishini oldini olish uchun kalitni qo'shing -s:

Temp \u003d "curl -s mi-al.ru"

Siz nima yozilganini ko'rishingiz mumkin:

Echo $ temp | Kamroq

Asosiy autentifikatsiya va HTTP autentifikatsiyasi

Autentifikatsiya, oddiy so'zlar bilan aytganda, foydalanuvchi nomi va parolni kiritmoqda.

Asosiy autentifikatsiya - bu server tomonidagi autentifikatsiya. Buning uchun ikkita fayl yaratiladi: .htaccess va .htpasswd

Htaccess fayllari tarkibiga o'xshash narsa

AuthName "Faqat ro'yxatdan o'tgan foydalanuvchilar uchun!" AuthType Basic uchun haqiqiy foydalanuvchi AuthUserFile /home/freeforum.biz/htdocs/.htpassw kerak


Htpasswd fayli quyidagicha:

Mial: CRdiI.ZrZQRRc

O'sha. kirish va parolni xashlash.

Parol bilan himoyalangan papkaga kirishga harakat qilsangiz, brauzer quyidagicha ko'rsatiladi:

Saytdagi formaga foydalanuvchi nomi va parolni kiritganimizda HTTP autentifikatsiyasi. Bu pochta, forum va boshqalarni kiritishda foydalaniladigan ushbu autentifikatsiya.

CURL asosiy autentifikatsiyasi (PHP)

Veb-sayt mavjud

Mehmonlardan yashiringan

Keling, dastlabki skriptni sinab ko'raylik:

0) (echo "Curl error:". Curl_error ($ ch);) else (echo $ response_data;) curl_close ($ ch); ?\u003e

Ssenariyda hech qanday xato yo'q deb o'ylashiga qaramay, biz chiqishni umuman yoqtirmaymiz:

Ikki qator qo'shing:

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

Birinchi qatorda biz autentifikatsiya turini o'rnatdik - asosiy. Ikkinchi satrda ikki nuqta bilan ajratilgan ism va parol mavjud (bizda ism va parol bir xil - ru-taxta). Bu shunday bo'ldi:

0) (echo "Curl error:". Curl_error ($ ch);) else (echo $ response_data;) curl_close ($ ch); ?\u003e Sinab ko'rilmoqda: 30946 Ajoyib! Asosiy cURL autentifikatsiyasi (buyruq satrida) Xuddi shu narsani buyruq satrida bitta satr bilan bajarish mumkin: curl -u ru-board: ru-board http://62.113.208.29/Update_FED_DAYS/

Autentifikatsiya turini ko'rsatishni unutganim yo'q, shunchaki cURL-da asosiy autentifikatsiya turi standart hisoblanadi.

Buyruq satrida hamma narsa shu qadar tezkor bo'lib chiqdiki, umidsizlik tufayli men ushbu dasturni yozdim. U saytga ulanadi va eng so'nggi yangilanishni yuklab oladi:

Temp \u003d `curl -s -u ru-board: ru-taxta http://62.113.208.29/Update_FED_DAYS/ | grep -E -o "Update_FED_201 (1). (2). (2) .7z") | uniq | quyruq -n 1`; curl -o $ temp -u ru-taxta: ru-taxta http://62.113.208.29/Update_FED_DAYS/$temp

Yana bir nechta buyruqlar yordamida siz quyidagilarni qo'shishingiz mumkin:

  • arxivni belgilangan katalogga ochish;
  • consultantPlus yangilanishlarini boshlash (bu uning uchun yangilanishlar);
  • oxirgi mavjud yangilanish allaqachon yuklab olinganmi yoki yangisi paydo bo'lganligini tekshirishingiz mumkin;
  • kunlik yangilanish uchun barchasini Cron-ga qo'shing.
HTTP cURL autentifikatsiyasi

PHP-da HTTP cURL autentifikatsiyasi

Biz bilishimiz kerak:

  • autentifikatsiya qilish uchun ma'lumotlarni yuboradigan manzil
  • gET yoki POST usulini yuboring
  • kirish
  • parol
Ba'zan bu ma'lumotlar etarli emas. Keling, buni aniqlaymiz.

Ma'lumotlar yuborilishi kerak bo'lgan manzilni autentifikatsiya shaklidan olish mumkin. Masalan:

Biz mulkni ko'rib chiqmoqdamiz harakat... O'sha. oxirgi sahifa login.php... Bizga shunga o'xshash to'liq manzil kerak

Mehmonlardan yashiringan

Bu erda biz yuborish usulini ham topamiz: method \u003d "post"

Shuningdek, men login va parolni bilaman: admin va qwerasdfzxcv
O'sha. satr serverga POST usuli yordamida formadan yuboriladi. Nazariy jihatdan, yangi qator qo'shgan avvalgi skriptimiz ishlashi kerak. O'sha. autentifikatsiya amalga oshirilishi kerak.

0) (echo "Curl error:". Curl_error ($ ch);) else () curl_close ($ ch); ?\u003e

Ssenariyda yangi satr

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

Bu yerda curl_setopt - cURL uchun parametrlarni o'rnatish uchun allaqachon tanish bo'lgan funktsiya, CURLOPT_POSTFIELDS biz o'rnatayotgan variantning nomi. CURLOPT_POSTFIELDSpOST usuli bilan yuborilgan barcha ma'lumotlarni o'z ichiga oladi. Xo'sh, chiziqning o'zi LOGIN_USER \u003d administrator & LOGIN_PASSWD \u003d qwerasdfzxcv - bu biz uzatadigan ma'lumotlar.

Shaklga diqqat bilan qarasangiz, unda yashirin maydonlar ham borligini ko'rishingiz mumkin. Va ma'lumotlar manipulyatsiya qilinishi yoki JavaScript bilan kengaytirilishi mumkin, bularning barchasini o'rganishingiz mumkin, ammo men oddiyroq usulni afzal ko'raman.

Men Wireshark-dan foydalanmoqdaman. Ushbu dastur trafikni ushlab turish (tutish) uchun mo'ljallangan. Va unda saytga aniq nima uzatilishini ko'rish juda qulaydir.

Ushbu kichkina videoni tomosha qiling:


O'sha. ma'lumotlar yuborilgan manzil bilan, menimcha. Ammo uzatilgan mag'lubiyat ancha murakkab bo'lib chiqdi.

Men to'g'ri parametrni kiritdim va skriptni biroz o'zgartirdim, shunda u nafaqat tizimga kiradi, balki yo'riqchidan ham biror narsa oladi:

0) (echo "Curl error:". Curl_error ($ ch);) else ($ target_url2 \u003d "http://188.35.8.64:8080/bsc_wlan.php"; $ ch2 \u003d curl_init ($ target_url2); curl_setopt ($ ch2, CURLOPT_RETURNTRANSFER, 1); $ response_data2 \u003d curl_exec ($ ch2); preg_match ("| f.ssid.value \u003d" (. *) "; |", $ response_data2, $ results2); $ results2 \u003d str_replace ("f .ssid.value \u003d "", "", $ results2); $ results2 \u003d str_replace (""; "," ", $ results2); echo" wi-fi tarmog'ining nomi: $ natijalar2
"; preg_match (" | f_wpa.wpapsk1.value (. *) "; |", $ response_data2, $ results3); $ results3 \u003d str_replace ("f_wpa.wpapsk1.value", "", $ results3); $ results3 \u003d str_replace ("\u003d" "," ", $ results3); $ results3 \u003d str_replace (" ";", "", $ results3); echo "wi-fi tarmog'i uchun parol: $ natijalar3";) curl_close ($ ch);?\u003e

Aytgancha, agar egasi parolni yangilasa (lekin dasturiy ta'minotni yangilamasa), unda yangi parolni har doim ko'rish mumkin

Mehmonlardan yashiringan

(Bu D-Link DIR-300, D-Link DIR-320 va D-Link DAP-1353 routerlarida taniqli zaiflik).

Buyruq satrida HTTP cURL autentifikatsiyasi

Biz allaqachon to'liq manzilni, shuningdek o'tkaziladigan qatorni bilamiz. Shuning uchun hamma narsa oddiy:

Curl - ma'lumotlar "ACTION_POST \u003d LOGIN & FILECODE \u003d & VERIFICATION_CODE \u003d & LOGIN_USER \u003d admin & LOGIN_PASSWD \u003d qwerasdfzxcv & login \u003d Kirish + Kirish + & VER_CODE \u003d" http://188.35.8.64:8080ph

O'ylaymanki, baribir hamma narsa aniq, chunki biz ushbu shartlarni allaqachon ko'rib chiqdik. Agar kimdir tushunmasa - izohlarda so'rang.

Ma'lumotlarni olish va tahlil qilish uchun cURL-dan foydalanish quyidagi buyruqlar to'plamidir:

Curl -s --data "ACTION_POST \u003d LOGIN & FILECODE \u003d & VERIFICATION_CODE \u003d & LOGIN_USER \u003d admin & LOGIN_PASSWD \u003d qwerasdfzxcv & login \u003d Log + In + & VER_CODE \u003d" http://188.35.8.64ho80 & 80l "&& echo" Wi-Fi Network Name "&& curl -s http://188.35.8.64:8080/bsc_wlan.php | grep -E "f.ssid.value \u003d" (.) * ";" | sed "s / f.ssid.value \u003d" // "| sed" s / "; //" && echo "Wi-Fi parol" && 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 / \u003d" // "

Ushbu sarlavhani shunday yozish to'g'ri bo'lar edi: "Murakkab" avtorizatsiya holatlari. O'sha. "murakkab" so'zini tirnoq belgilariga qo'ying. Ular faqat bir qarashda murakkab bo'lib tuyuladi, aniq bo'lmaganida: jo'natmalar qaerga ketayotgani, maydonlarning nomlari, aniq nima yuborilganligi va h.k.

Ammo, aslida, ularning hammasi POST yoki GET usullariga qadar qaynaydi. To'liq nima yuborilayotganligini tushunish uchun siz sahifani forma bilan diskka saqlashingiz va yuborish uchun hosil bo'lgan ma'lumotlarni ko'rsatish tugmachasini osib qo'yishingiz mumkin. Yoki undan ham osonroq - men kabi, Wireshark.

Agar ma'lumotlar to'g'ri bo'lsa va autentifikatsiya qilinmasa, siz quyidagi yo'nalishlarda qazishingiz kerak:

  • to'g'ri yo'naltiruvchi qatorni o'rnating
  • "to'g'ri" foydalanuvchi agenti qatorini o'rnating.
Bularning barchasi asosiy cURL usullari bilan amalga oshirilishi mumkin, ammo men bu haqda to'xtamayman. Dars allaqachon a'lo darajada bo'lib chiqdi, lekin men ham CURL bilan ikkita fokusni namoyish qilmoqchi edim.

CURL bo'yicha maslahatlar va tavsiyalar

cURL va CURLOPT_COOKIEJAR-dan tashqari cookie-fayllarni qabul qilish

O'ylaymanki, cURL cookie-fayllarni to'g'ri ishlashi - ularni saqlaydi, server so'raganda foydalanadi va hokazo. Ammo ba'zida cookie-fayllarni saqlash kerak bo'ladi. Buning uchun CURLOPT_COOKIEJAR variant mavjud, ammo uni har doim ham ishlatish mumkin emas. Bizning birinchi hiyla-nayrangimiz shu haqida.

Ba'zan, serverdagi PHP sozlamalarining o'ziga xos xususiyatlaridan kelib chiqqan holda, CURLOPT_COOKIEJAR (qabul qilingan cookie fayllarini faylga saqlashga imkon beradi) va CURLOPT_COOKIEFILE (fayldan cookie-fayllardan foydalanishga imkon beradi) kabi variantlar biz uchun mavjud emas. Chunki ular ushbu parametrlardan foydalangan holda har qanday faylni ularning serverlaridan olishimiz mumkinligini aytishadi. Ushbu muammoning echimi:

1) CURLOPT_FOLLOWLOCATION dan foydalanmang
2) curl_setopt dan foydalaning ($ ch, CURLOPT_HEADER, 1)
3) Biz kukilarni sarlavhadan quyidagicha to'playmiz:

Preg_match_all ("| Set-Cookie: (. *); | U", $ content, $ results); $ cookies \u003d implode (";", $ natijalari);

4) ularni curl_setopt ($ ch, CURLOPT_COOKIE, $ cookies) yordamida sozlang;

Ikkinchi maslahat. Biz tajovuzkorlardan qurbonlarga aylanishimiz mumkin. O'rtada odam hujumi qurboniga aylanmaslik uchun biz buni qilamiz.

Iltimos, barchangiz, CURLOPT_SSL_VERIFYPEER sozlamasini "false" yoki "0" ga qo'yishni to'xtating, agar sizning PHP o'rnatishingizda CA-ning zamonaviy sertifikatlari mavjud bo'lmasa, ularni curl veb-saytidan yuklab oling va serveringizga saqlang:

Mehmonlardan yashiringan

Keyin php.ini faylida yo'lni o'rnating, masalan, Windows-da:

Curl.cainfo \u003d c: phpcacert.pem

CURLOPT_SSL_VERIFYPEER-ni o'chirib qo'yish, o'rtada odam (MITM) hujumiga imkon beradi, bu bizga kerak emas!

Xo'sh, bugungi kun uchun so'nggi maslahat. Bilasizmi, ko'p sonli asenkron kıvrılma so'rovlari mumkin?

Buning uchun siz foydalanishingiz mumkin curl_multi_init... Rasmiy hujjatlardagi tafsilotlar va namunaviy kod

Mehmonlardan yashiringan

Mehmonlardan yashiringan


Buyruq satrida cURL haqida

Mehmonlardan yashiringan


Rus tilida o'qish uchun cURL darsining ikkinchi qismi ham tayyorlanadi: "".
Maqola sizga yoqdimi? Do'stlar bilan bo'lishish uchun: