Învățați să lucrați cu solicitări GET și POST. Care este diferența dintre POST și GET Ce este post și get

Despre care am discutat în postarea anterioară, există o altă metodă de a trimite o solicitare folosind protocolul HTTP - metoda POST. Metoda POST este, de asemenea, foarte des folosită în practică.

Dacă, pentru a contacta serverul folosind metoda GET, trebuia doar să introducem o cerere în URL, atunci în metoda POST totul funcționează pe un alt principiu.

Pentru a executa acest tip de solicitare, trebuie să facem clic pe butonul cu atributul type="submit", care se află pe pagina web. Vă rugăm să rețineți că acest buton se află în element

, care are atributul de metodă setat la post.

Luați în considerare acest cod HTML:

Introdu text:


Dacă utilizatorul introduce un text în câmpul de text și dă clic pe butonul „Trimite”, atunci variabila text va fi trimisă la server cu valoarea conținutului introdus de utilizator. Această variabilă va fi trimisă folosind metoda POST.

Daca scrii asta sub forma:

Apoi datele vor fi trimise folosind metoda GET.

Dacă, în cazul unei solicitări GET, cantitatea de date pe care le-am putea transmite era limitată de lungimea barei de adrese a browserului, atunci în cazul unei solicitări POST, nu există o astfel de limitare și putem transmite cantități semnificative. de informatii.

O altă diferență între metoda POST și metoda GET este că metoda POST ascunde toate variabilele pe care le transmite și valorile acestora în corpul său (Entity-Body). În cazul metodei GET, acestea au fost stocate în șirul de solicitare (Request-URI).

Iată un exemplu de solicitare făcută folosind metoda POST:

POST / HTTP/1.0\r\n
Gazdă: www.site.ru\r\n
Referer: http://www.site.ru/index.html\r\n
Cookie: venit=1\r\n
Tip de conținut: application/x-www-form-urlencoded\r\n
Lungimea conținutului: 35\r\n
\r\n
login=Dima&parola=12345

Astfel, prin transmiterea datelor folosind metoda POST, va fi mult mai dificil pentru un atacator să le intercepteze, deoarece sunt ascunse din vedere directă, astfel încât metoda POST de transmitere a datelor este considerată o metodă mai sigură.

În plus, folosind metoda POST puteți transfera nu numai text, ci și date multimedia (imagini, audio, video). Există un parametru special Content-Type care determină tipul de informații care trebuie transmise.

Și în final, pentru a primi pe server datele care au fost transmise prin această metodă, se folosește variabila POST.

Iată un exemplu de procesare în PHP:

echo $_POST['text'];
?>

Apropo, dacă doriți să aflați conversii și indicatori cheie (KPI) pentru site-ul dvs. de vânzare, pot configura analiza web.

Yandex Metrica și Google Analytics. Obiective, evenimente, rapoarte.

Ceea ce au în comun este că funcționează la fel. Din punct de vedere tehnic, nu există nicio diferență între ele. Dar există diferențe ideologice.

Voi vorbi despre ele în contextul PHP. Vă rugăm să rețineți că protocolul HTTP este indirect legat de PHP deoarece a fost creat pentru schimbul de pagini html și PHP pur și simplu extinde capacitățile ambelor.

Solicitarea GET este folosită pentru a primi date și POST este folosit pentru a trimite. (Amintiți-vă că din punct de vedere tehnic funcționează la fel).

Prin urmare, în contextul PHP, pe baza acestei ideologii, am făcut următoarele:
1. De fiecare dată când porniți PHP, matricele superglobale ($_GET, $_POST) sunt create implicit.
2. Dacă există un semn de întrebare (?) în șirul de interogare. Totul după ce este luat în considerare parametrii Cererea GET sunt prezentate în formatul "key"="valoare" iar caracterul ampersand (&) este folosit ca delimitator.
Exemplu:
GET /index.php?name=Andrey&surname=Galkin
Acesta este un șir de interogare, există 2 parametri. acești parametri vor intra în matricea $_GET.
3. $_POST este completat într-un mod diferit. conținutul acestei matrice este completat din „antetele cererii”. Adică dintr-un loc clar ascuns vederii. Browserul se ocupă de toate treburile creării unor astfel de anteturi. Deși uneori ceva este editat în titluri manual.

Cel mai adesea, o cerere de postare este utilizată în formulare (pentru a trimite date).

De exemplu, avem un formular de autentificare cu 2 câmpuri: autentificare și parolă.

Să ne imaginăm că folosim metoda GET. Apoi, la trimiterea formularului, vom merge la următoarea adresă /login.php?login=Andrey&password=123 Veți fi de acord că transmiterea unor astfel de informații în acest mod nu este deloc sigură. Oricine vă poate deschide browserul și, începând să introducă adresa site-ului, vă poate vedea parolele și login-urile din istoric.

Dar dacă am specifica metoda POST, am primi următoarea solicitare:
POST /login.php (login=Andrey&password=123) ceea ce este între paranteze ar fi ascuns și nu ar fi salvat în niciun fel în browser.

Pentru a rezuma:
GET este de a obține o anumită pagină într-o anumită formă (sortare, pagină curentă de blog, bară de căutare etc.).
POST - pentru trimiterea de date care nu afectează afișarea paginii, în sensul că aceste date afectează doar rezultatul scriptului (autentificări, parole, numere de card de credit, mesaje etc.).

Și o altă veste bună este că pot fi combinate, de exemplu
POST /index.php?page=login (login=Andrey&password=123) Cred că am explicat deja suficient ce va veni din asta și ce parametri vor intra în ce matrice.

Prima metodă de a efectua o solicitare PHP POST este utilizarea file_get_contents . A doua metodă va folosi fread în combinație cu alte câteva funcții. Ambele opțiuni folosesc funcția stream_context_create pentru a completa câmpurile de antet solicitate.

Explicația codului

Variabila $sPD conține datele de transferat. Trebuie să fie în format de șir de solicitare HTTP, așa că unele caractere speciale trebuie să fie codificate.

Atât în ​​funcția file_get_contents, cât și în funcția fread avem doi parametri noi. Primul este use_include_path . Deoarece facem o solicitare HTTP, aceasta va fi falsă în ambele exemple. Când este setată la true pentru a citi o resursă locală, funcția va căuta fișierul la include_path .

Al doilea parametru este context, care este populat cu valoarea returnată a stream_context_create, care ia valoarea matricei $aHTTP.

Folosind file_get_contents pentru a face cereri POST

Pentru a trimite o solicitare POST folosind file_get_contents în PHP, trebuie să utilizați stream_context_create pentru a completa manual câmpurile de antet și a specifica ce „wrapper” să utilizați - în acest caz HTTP:

$sURL = "http://brugbart.com/Examples/http-post.php"; // POST URL $sPD = "nume=Jacob&bench=150"; // Date POST $aHTTP = array("http" => // Wrapper care va fi folosit array("method" => "POST", // Metoda de solicitare // Anteturile de solicitare sunt setate sub "header" => "Conținut - tip: application/x-www-form-urlencoded", "content" => $sPD)); $context = stream_context_create($aHTTP); $contents = file_get_contents($sURL, false, $context); echo $conținut;

Folosind fread pentru a face cereri POST

Puteți folosi funcția fread pentru a face solicitări POST. Următorul exemplu utilizează stream_context_create pentru a compune anteturile de solicitare HTTP necesare:

$sURL = "http://brugbart.com/Examples/http-post.php"; // POST URL $sPD = "nume=Jacob&bench=150"; // Date POST $aHTTP = array("http" => // Wrapper care va fi folosit array("method" => "POST", // Request Method // Antetele cererii sunt setate sub "header" => "Conținut - tip: application/x-www-form-urlencoded", "content" => $sPD)); $context = stream_context_create($aHTTP); $handle = fopen($sURL, "r", false, $context); $conținut = ""; în timp ce (!feof($mâner)) ( $conținut .= fread($mâner, 8192); ) fclose($mâner); echo $conținut;

Efectuarea cererilor GET cu PHP

Acum ne vom concentra pe utilizarea fread și file_get_contents pentru a descărca conținut de pe internet prin HTTP și HTTPS. Pentru a utiliza metodele descrise în acest articol, trebuie să activați opțiunea fopen wrappers. Pentru a face acest lucru, trebuie să setați parametrul allow_url_fopen la On în fișierul php.ini.

Efectuarea solicitărilor POST și GET în PHP este folosită pentru a vă conecta pe site-uri web, pentru a prelua conținutul paginii web sau pentru a verifica noi versiuni de aplicații. Vom acoperi cum să faceți solicitări HTTP simple.

Utilizarea fread pentru a descărca sau a primi fișiere prin Internet

Rețineți că citirea paginii web este limitată la porțiunea accesibilă a pachetului. Deci trebuie să utilizați funcția stream_get_contents ( similar cu file_get_contents) sau o buclă while pentru a citi conținutul în bucăți mai mici până când se ajunge la sfârșitul fișierului:

În acest caz de procesare a unei solicitări PHP POST, ultimul argument al funcției fread este egal cu dimensiunea fragmentului. În general, nu ar trebui să fie mai mare de 8192 ( 8*1024 ).

Rețineți că poate fi mai mare sau mai mic și poate fi, de asemenea, limitat de setările sistemului pe care rulează PHP.

Folosind file_get_contents pentru a obține adresa URL a site-ului

Este și mai ușor să utilizați această metodă atunci când citiți un fișier prin HTTP, deoarece nu trebuie să vă faceți griji cu privire la citirea în bucăți - totul este gestionat în PHP.

Această publicație este o traducere a articolului „Making POST Requests With PHP”, pregătit de echipa prietenoasă de proiect

Acest post are scopul de a explica principiile transmisiei de date pe Internet folosind două metode principale: GET și POST. L-am scris ca supliment la instrucțiunile pentru generatorul de program de schimb pentru cei care probabil că nu vor fi interesați de detalii ☺.

Accesați următoarea adresă (aceasta este pentru o explicație vizuală): http://calendarin.net/calendar.php?year=2016 Atenție la bara de adrese a browserului: calendarin.net/calendar.php ?an=2016 Fișierul principal este denumit urmat de un semn de întrebare (?) și de un parametru „an” cu valoarea „2016”. Deci, tot ce urmează semnul întrebării este o solicitare GET. Este simplu. Pentru a trece mai mult de un parametru, aceștia trebuie să fie separați de un ampersand (&). Exemplu: calendarin.net/calendar.php ?year=2016&display=work-days-and-days-off

Fișierul principal este încă denumit, urmat de un semn de întrebare (?), apoi de un parametru „an” cu valoarea „2016”, apoi de un ampersand (&), apoi de un parametru de „afișare” cu valoarea „zile de lucru- și-zile” -off”.

Parametrii GET pot fi modificați direct în bara de adrese a browserului. De exemplu, schimbarea valorii „2016” în „2017” și apăsarea tastei vă va duce la calendarul pentru 2017.

Acesta este un transfer ascuns de date (adresa paginii nu se schimbă); adică poți vedea doar ceea ce a fost transferat folosind un program (script). De exemplu, în următorul instrument de numărare a caracterelor din text, datele originale sunt transmise folosind metoda POST: http://usefulonlinetools.com/free/character-counter.php

Dacă aveți întrebări, comentarii și e-mailul meu vă stă la dispoziție.

Pe lângă metoda GET, despre care am discutat în postarea anterioară, există o altă metodă de trimitere a unei cereri prin protocolul HTTP - metoda POST. Metoda POST este, de asemenea, foarte des folosită în practică.

Dacă, pentru a contacta serverul folosind metoda GET, trebuia doar să introducem o cerere în URL, atunci în metoda POST totul funcționează pe un alt principiu.

Pentru a executa acest tip de solicitare, trebuie să facem clic pe butonul cu atributul type="submit", care se află pe pagina web. Vă rugăm să rețineți că acest buton se află în element , care are atributul de metodă setat la post.

Luați în considerare acest cod HTML:

Introdu text:


Dacă utilizatorul introduce un text în câmpul de text și dă clic pe butonul „Trimite”, atunci variabila text va fi trimisă la server cu valoarea conținutului introdus de utilizator.

POST și GET solicitări în cuvinte simple

Această variabilă va fi trimisă folosind metoda POST.

Daca scrii asta sub forma:

Apoi datele vor fi trimise folosind metoda GET.

Dacă, în cazul unei solicitări GET, cantitatea de date pe care le-am putea transmite era limitată de lungimea barei de adrese a browserului, atunci în cazul unei solicitări POST, nu există o astfel de limitare și putem transmite cantități semnificative. de informatii.

O altă diferență între metoda POST și metoda GET este că metoda POST ascunde toate variabilele pe care le transmite și valorile acestora în corpul său (Entity-Body). În cazul metodei GET, acestea au fost stocate în șirul de solicitare (Request-URI).

Iată un exemplu de solicitare făcută folosind metoda POST:

POST / HTTP/1.0\r\n
Gazdă: www.site.ru\r\n
Referer: http://www.site.ru/index.html\r\n
Cookie: venit=1\r\n
Tip de conținut: application/x-www-form-urlencoded\r\n
Lungimea conținutului: 35\r\n
\r\n
login=Dima&parola=12345

Astfel, prin transmiterea datelor folosind metoda POST, va fi mult mai dificil pentru un atacator să le intercepteze, deoarece sunt ascunse din vedere directă, astfel încât metoda POST de transmitere a datelor este considerată o metodă mai sigură.

În plus, folosind metoda POST puteți transfera nu numai text, ci și date multimedia (imagini, audio, video). Există un parametru special Content-Type care determină tipul de informații care trebuie transmise.

Și în final, pentru a primi pe server datele care au fost transmise prin această metodă, se folosește variabila POST.

Iată un exemplu de procesare în PHP:

echo $_POST['text'];
?>

În ultima postare, am decis că browserul (clientul) trimite cereri HTTP către server, iar serverul trimite răspunsuri HTTP către client. Aceste cereri și răspunsuri sunt formatate în conformitate cu anumite reguli. Există ceva ca o sintaxă, cum și în ce ordine ar trebui scrisă. Trebuie să existe o structură strict definită.

Să aruncăm o privire mai atentă asupra acestei structuri prin care cererile și răspunsurile sunt construite în protocolul HTTP.

O solicitare HTTP constă din trei părți principale, care apar în ordinea de mai jos. Între anteturi și corpul mesajului există o linie goală (ca separator), aceasta reprezintă un caracter de avans de linie.

Șir gol (delimitator)

Postați și primiți solicitări, care este diferența dintre ele și care este mai bună și în ce scopuri?

Corpul mesajului (Entity Body) – parametru opțional

Șir de interogare– specifică metoda de transfer, adresa URL care trebuie accesată și versiunea protocolului HTTP.

Titluri– descrie corpul mesajelor, transmite diverși parametri și alte informații și informații.

corpul mesajului- acestea sunt datele în sine care sunt transmise în cerere. Corpul mesajului este un parametru opțional și poate lipsi.

Când primim o solicitare de răspuns de la server, corpul mesajului este cel mai adesea conținutul paginii web. Dar, atunci când facem cereri către server, poate fi uneori prezent și, de exemplu, atunci când transferăm datele pe care le-am completat în formularul de feedback către server.

Vom analiza fiecare element al cererii mai detaliat în notele următoare.

Să luăm, de exemplu, o cerere reală către server. Am evidențiat fiecare parte a solicitării cu o culoare diferită: linia de solicitare este verde, antetele sunt portocalii și corpul mesajului este albastru.

Solicitare browser:

Gazdă: webgyry.info

Cookie: wp-settings

Conexiune: păstrați-vă în viață

În exemplul următor, corpul mesajului este deja prezent.

Răspunsul serverului:

Tip de conținut: text/html; set de caractere=UTF-8

Transfer-Codificare: fragmentat

Conexiune: păstrați-vă în viață

Keep-Alive: timeout=5

X-Pingback: //webgyry.info/xmlrpc.php

Document fără titlu

Acestea sunt mesajele schimbate între client și server prin HTTP.

Apropo, doriți să aflați dacă există vreun rost în vreun element de pe site-ul dvs., folosind „obiectivele” Yandex Metrics și Google Analytics?

Eliminați ceea ce nu funcționează, adăugați ceea ce funcționează și dublați-vă veniturile.

Curs despre stabilirea obiectivelor Yandex Metrica..

Curs despre stabilirea obiectivelor Google Analytics..

Clientul HTTP trimite o cerere către server sub forma unui mesaj de solicitare, care are următorul format:

  • Șir de interogare (obligatoriu)
  • Titlu (element opțional)
  • Șir gol (obligatoriu)
  • Corpul mesajului (element opțional)

Să ne uităm la fiecare dintre aceste elemente separat.

Șir de interogare

Linia de solicitare începe cu un simbol al metodei, urmat de URI-ul cererii și versiunea protocolului. Elementele sunt separate unele de altele prin spații:

Să ne uităm la acest element mai detaliat.

Metoda de solicitare

Acest element specifică o metodă care ar trebui apelată pe partea de server la URI-ul specificat.

Există opt metode în HTTP:

  • CAP
    Folosit pentru a obține starea și șirul antetului de la server prin URI. Nu modifică datele.
  • OBŢINE
    Folosit pentru a primi date de la server la URI-ul specificat. Nu modifică datele.
  • POST
    Folosit pentru a trimite date către server (cum ar fi informații despre dezvoltatori etc.) folosind formulare HTML.
  • PUNE
    Înlocuiește toate datele anterioare de pe resursă cu noile date încărcate.
  • ŞTERGE
    Șterge toate datele curente de pe resursa specificată de URI.
  • CONECTAȚI
    Stabilește o conexiune tunel la server la URI-ul specificat.
  • OPȚIUNI
    Descrie proprietățile conexiunii pentru resursa specificată.
  • URMĂ
    Furnizează un mesaj care conține o urmă de returnare a locației resursei specificate în URI.

Solicitare URI

URI (Uniform Resource Identifier) ​​este identificatorul resursei către care este trimisă cererea. Următorul este formatul URI cel mai frecvent utilizat:

‘*’ utilizat atunci când o solicitare HTTP nu se referă la o anumită resursă, ci la un server. Folosit numai atunci când metoda nu trebuie aplicată la o resursă. De exemplu,

absoluteURI utilizat atunci când se face o solicitare HTTP pe un proxy. Proxy-ului i se cere să transmită cererea din memoria cache disponibilă și returnează un răspuns. De exemplu:

cale_absolută | sursă cel mai des folosit.

Învățați să lucrați cu solicitări GET și POST

Este solicitată o anumită resursă pe un anumit server. De exemplu, un client dorește să primească o resursă de la un server prin portul 80. Adresa resursei este „www.proselyte.net” și trimite următoarea solicitare:

Interogarea câmpurilor antet

Câmpurile de antet permit clientului să transmită serverului informații suplimentare despre cerere și despre el însuși. Aceste câmpuri acționează ca modificatori de interogare.

Mai jos este o listă cu cele mai importante câmpuri de antet care pot fi utilizate:

  • Accept-Charset
  • Acceptare-Codare
  • Accept-Limba
  • Autorizare
  • Aştepta
  • Dacă-Match
  • Dacă-Modificat-De vreme ce
  • Dacă-Niciunul-Se potrivește
  • Dacă-Range
  • Dacă-Nemodificat-De vreme ce
  • Gamă
  • Referitor
  • User-Agent

Dacă dorim să implementăm propriul nostru client și propriul nostru server web, atunci ne putem crea propriile câmpuri de antet.

Exemplu de solicitare HTTP

Aceasta încheie studiul nostru despre solicitările HTTP.
În articolul următor ne vom uita la răspunsurile HTTP.

Una dintre modalitățile prin care puteți trimite o solicitare HTTP către un server este metoda GET. Această metodă este cea mai comună și solicitările către server apar cel mai adesea folosind ea.

Cel mai simplu mod de a crea o solicitare GET este să tastați adresa URL în bara de adrese a browserului dvs.

Browserul va trimite serverului aproximativ următoarele informații:

GET / HTTP/1.1
Gazdă: webgyry.info
Agent utilizator: Mozilla/5.0 (Windows NT 6.1; rv:18.0) Gecko/20100101 Firefox/18.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Limba de acceptare: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3
Acceptare-Codificare: gzip, deflate
Cookie: wp-settings
Conexiune: păstrați-vă în viață

Cererea este formată din două părți:

1. Linie de solicitare

2. Antetele mesajelor

Rețineți că o solicitare GET nu are un corp de mesaj. Dar asta nu înseamnă că cu ajutorul lui nu putem transmite nicio informație către server.

Diferența dintre metodele GET și POST

Acest lucru se poate face folosind parametri speciali GET.

Pentru a adăuga parametri GET la o solicitare, trebuie să adăugați un „?” la sfârșitul adresei URL. și după aceea începeți să le întrebați după următoarea regulă:

parameter_name1=parameter_value1& parameter_name2=parameter_value2&...

Separatorul dintre parametri este semnul „&”.

De exemplu, dacă dorim să transmitem serverului două valori, numele de utilizator și vârsta lui, atunci acest lucru se poate face cu următoarea linie:

http://site.ru/page.php?name=dima&age=27

Când această solicitare este executată, datele ajung în așa-numita variabilă de mediu QUERY_STRING, de la care pot fi preluate pe server folosind un limbaj de programare web pe partea serverului.

Iată un exemplu despre cum se poate face acest lucru în PHP.

echo „Numele tău: ” . $_GET[„nume”] . "
»;
ecou "Vârsta ta: " . $_GET[„varsta”] . "
»;
?>

Construcția $_GET[“nume_parametru”] vă permite să afișați valoarea parametrului transmis.

Ca urmare a executării acestui cod în browser, vor fi afișate următoarele:

Numele tău: dima
Varsta ta: 27

De asemenea, facem o cerere către server folosind metoda GET.