Razlika između zahtjeva za preuzimanje. GET or POST: šta odabrati? Prenošenje varijabli korištenjem GET metode
Prva metoda za izvođenje PHP POST zahtjeva je korištenje file_get_contents. Druga metoda će koristiti fread u kombinaciji s nekoliko drugih funkcija. Obje opcije koriste funkciju stream_context_create da popune potrebna polja zaglavlja zahtjeva.
Objašnjenje koda
Varijabla $sPD sadrži podatke za prijenos. Mora biti u HTTP formatu stringa zahtjeva, tako da neki posebni znakovi moraju biti kodirani.
I u funkciji file_get_contents i u funkciji fread imamo dva nova parametra. Prvi je use_include_path. Budući da pravimo HTTP zahtjev, on će biti lažan u oba primjera. Kada je postavljeno na true za čitanje lokalnog resursa, funkcija će tražiti datoteku na include_path.
Drugi parametar je kontekst, koji je popunjen povratnom vrijednošću stream_context_create, koji uzima vrijednost $aHTTP niza.
Korištenje file_get_contents za izradu POST zahtjeva
Da pošaljete POST zahtjev koristeći file_get_contents u PHP-u, trebate koristiti stream_context_create da ručno popunite polja zaglavlja i odredite koji "wrapper" koristiti - u ovom slučaju HTTP:
$sURL = "http://brugbart.com/Examples/http-post.php"; // POST URL $sPD = "name=Jacob&bench=150"; // POST podaci $aHTTP = array("http" => // Omot koji će se koristiti array("method" => "POST", // Metoda zahtjeva // Zaglavlja zahtjeva su postavljena ispod "header" => "Sadržaj - tip: application/x-www-form-urlencoded", "content" => $sPD)); $context = stream_context_create($aHTTP); $contents = file_get_contents($sURL, false, $context); echo $contents;
Korištenje fread-a za izvođenje POST zahtjeva
Možete koristiti funkciju fread za izradu POST zahtjeva. Sljedeći primjer koristi stream_context_create za sastavljanje potrebnih zaglavlja HTTP zahtjeva:
$sURL = "http://brugbart.com/Examples/http-post.php"; // POST URL $sPD = "name=Jacob&bench=150"; // POST podaci $aHTTP = array("http" => // Omot koji će se koristiti array("method" => "POST", // Metoda zahtjeva // Zaglavlja zahtjeva su postavljena ispod "header" => "Sadržaj - tip: application/x-www-form-urlencoded", "content" => $sPD)); $context = stream_context_create($aHTTP); $handle = fopen($sURL, "r", false, $context); $contents = ""; while (!feof($handle)) ( $contents .= fread($handle, 8192); ) fclose($handle); echo $contents;
Izrada GET zahtjeva sa PHP-om
Sada ćemo se fokusirati na korištenje fread-a i file_get_contents-a za preuzimanje sadržaja s interneta putem HTTP-a i HTTPS-a. Da biste koristili metode opisane u ovom članku, morate omogućiti opciju fopen wrappers. Da biste to uradili, potrebno je da postavite parametar allow_url_fopen na On u php.ini datoteci.
Izvođenje POST i GET zahtjeva u PHP-u koristi se za prijavu na web stranice, preuzimanje sadržaja web stranica ili provjeru novih verzija aplikacija. Pokrićemo kako napraviti jednostavne HTTP zahtjeve.
Korišćenje fread-a za preuzimanje ili primanje datoteka preko Interneta
Zapamtite da je čitanje web stranice ograničeno na pristupačni dio paketa. Dakle, trebate koristiti funkciju stream_get_contents ( slično file_get_contents) ili while petlja da pročitate sadržaj u manjim komadima dok se ne dostigne kraj datoteke:
U ovom slučaju obrade PHP POST zahtjeva, posljednji argument funkcije fread jednak je veličini fragmenta. Generalno ne bi trebao biti veći od 8192 ( 8*1024 ).
Imajte na umu da može biti veći ili manji, a može biti i ograničen postavkama sistema na kojem PHP radi.
Korištenje file_get_contents za dobivanje URL-a stranice
Još je lakše koristiti ovu metodu kada čitate datoteku preko HTTP-a, jer ne morate da brinete o čitanju u komadima - sve se rukuje u PHP-u.
Ova publikacija je prijevod članka “Izrada POST zahtjeva pomoću PHP-a”, koji je pripremio prijateljski projektni tim
Danas se najčešće koriste samo dvije HTTP metode: GET i POST. Ali pokazalo se da čak i među ova dva „bora“ web programeri uspevaju da se izgube. Za to postoji objašnjenje: obje metode se mogu koristiti za postizanje istog rezultata. Ali moramo imati na umu da nepromišljena upotreba bilo koje od metoda može dovesti do katastrofalnih posljedica, uključujući velika opterećenja na kanalu i sigurnosne rupe.
Da biste to izbjegli, dovoljno je jednostavno detaljnije razumjeti svrhu i razlike ovih metoda.
Ako se udubite u značenje naziva metoda, mnogo toga će postati jasnije. GET (sa engleskog za primanje), tj. treba koristiti za upite podataka. POST (od engleskog poslati poštom) - koristi se za slanje podataka na server. Čini se da je sve krajnje jednostavno i jasno. Ali ko želi da razvije web stranice malo kompliciranije od web stranice sa vizit kartama s jednim obrascem za povratne informacije, bolje je da se bolje upozna s problemom.
Sigurni i nesigurni HTTP zahtjevi
HTTP 1.1 specifikacija uvodi dva koncepta: siguran i nesiguran zahtjev, ili preciznije, metod.
Sigurne metode su metode koje mogu tražiti samo informacije. Ne mogu promijeniti traženi resurs, niti mogu dovesti do neželjenih rezultata za korisnika, druge ili server. Primjeri sigurnih su zahtjev za HTML kodom web stranice ili slike. Sigurne metode uključuju HEAD i GET.
Napomena
U stvarnosti, zanatlije, naravno, mogu naškoditi GET zahtjevima. Na primjer, petlje upita.
Nesigurni upiti, kao što su svi već pretpostavili, mogu potencijalno dovesti do loših posljedica ako se ponovo koriste. Takvi zahtjevi mogu promijeniti sadržaj resursa kojem se pristupa. Primjeri takvih zahtjeva: slanje poruka, registracija, online plaćanja. Nesigurne metode uključuju POST, PUT, DELETE.
Idempotentne metode
Idempotencija je svojstvo metoda koje će, uz brojne ponovljene pozive, vratiti isti rezultat, osim u slučajevima kada su informacije zastarjele. To znači da će prilikom pristupa istom URL-u svi korisnici vidjeti istu web stranicu, sliku, video itd. Metode GET, PUT, DELETE imaju ovo svojstvo.
Sada pogledajmo bliže same GET i POST metode: napišimo kratak "sažetak" za svaku.
GET
- dizajniran za primanje podataka sa servera;
- tijelo zahtjeva je prazno;
- obrađuje se na strani servera brže i uz manju potrošnju serverskih resursa zbog praznog tijela zahtjeva;
- prijenos varijabli se događa u adresnoj traci (tako ga vidi korisnik; tehnički se podaci prenose u liniji upita) i stoga su vidljive informacije o varijablama i njihovim vrijednostima (podaci nisu zaštićeni);
- može prenijeti malu količinu podataka na server: postoje ograničenja na dužinu URL-a, koja ovisi o pretraživaču, na primjer, IE6 = 2Kb. Yahoo! programeri preporučuju fokusiranje na ovaj broj;
- može prenositi samo ASCII znakove;
- takav zahtjev se može kopirati i sačuvati (na primjer, u markerima);
- zahtjev se može keširati (ovo se može kontrolisati);
- kako bi se dodatno smanjilo opterećenje kanala i servera, dostupni su uvjetni i djelomični zahtjevi;
- ne prekida HTTP vezu (ako je režim KeepAlive omogućen na serveru).
POŠTA
- namijenjen za slanje podataka na server;
- prijenos podataka se odvija u tijelu zahtjeva;
- obrada na strani servera je sporija i „teža“ od GET-a, jer se pored zaglavlja mora analizirati i tijelo zahtjeva;
- sposoban za prijenos velikih količina podataka;
- sposoban za prijenos datoteka;
- stranica generirana metodom POST ne može se sačuvati kao oznake;
- prekida HTTP vezu;
- Za prijenos čak i vrlo male količine informacija, većina pretraživača šalje najmanje dva TCP paketa: zaglavlje, a zatim tijelo zahtjeva.
Ispostavilo se da ove dvije metode nisu toliko slične. Korištenje jednog ili drugog bi trebalo biti određeno zadatkom koji je na raspolaganju, a ne činjenicom da se GET koristi po defaultu ili je lakši za rad. GET je, naravno, bolja opcija u većini slučajeva, posebno kada se gradi brzi AJAX, ali ne zaboravite na njegove nedostatke. Za sebe sam napravio jednostavan algoritam-napomenu o izboru metode.
Možda ste primijetili da na većini stranica možete vidjeti sljedeće adrese:
Http://site/index.php?blog=2
Ovdje, čak i bez poznavanja php-a, možete pretpostaviti da pristupamo datoteci index.php Ali malo ljudi zna šta dolazi iza upitnika. Vrlo je jednostavno: ?blog=2 Ovo je deklaracija globalne varijable "$_GET["blog"]" sa vrijednošću "2". Stoga u skriptu prosljeđujem varijablu koja je odgovorna za prikaz informacija iz baze podataka. Hajde da napišemo malu skriptu u kojoj možete sve jasno vidjeti:
if(isset($_GET["blog"])) (
echo $_GET["blog"];
}
?>
Koristimo if() operator uslova i sljedeći red se koristi kao uvjet:
Isset($_GET["blog"])
isset() vam omogućava da saznate postoji li varijabla navedena u zagradama, odnosno uvjet koji sam opisao u kodu zvuči ovako: Ako postoji varijabla $_GET["blog"], tada prikažite sadržaj ove varijable na ekranu. Evo šta se dogodilo:
Mislim da je jasno Kreirana je globalna varijabla $_GET sa identifikatorom koji smo deklarirali u adresnoj traci ( u ovom slučaju sa identifikatorom “blog”)
Sada želim da razjasnim jednu stvar. Pretpostavimo da trebamo deklarirati dvije varijable, kako to učiniti? Prva varijabla je deklarirana nakon upitnika "?" Druga varijabla je deklarirana nakon znaka “&” ( Da budem iskren, ne znam koji je ovo znak), evo primjera deklaracije tri varijable:
Http://site/index.php?a=1&b=2&c=3
Evo izlaznog koda:
if(isset($_GET["a"]) I isset($_GET["b"]) I isset($_GET["c"])) (
echo $_GET["a"]."
";
echo $_GET["b"]."
";
echo $_GET["c"]."
";
}
?>
Stanje zvuči ovako:
Ako postoji globalna varijabla $_GET["a"] i globalna varijabla $_GET["b"] i globalna varijabla $_GET["c"], onda ih prikažite na ekranu, evo rezultata:
Forms
Prije nego što stignemo pošta zahtjeva, morate razumjeti koji su obrasci? Zašto je to potrebno? Zato što je globalna varijabla $_POST[""] kreirana kroz forme. Šta je forma? Ovo su polja u koja korisnik može unijeti neke informacije. Postoje polja u jednom redu, velika polja, kao i radio dugmad i potvrdni okviri. Hajdemo sve po redu...
Forma je oznaka:
Obrazac ima atribute, navest ću one najčešće:
Kreirajmo formu:
Postavio sam datoteku kao datoteku za rukovanje test.php jer upravo u njemu pišem primjere za vas. Postavio sam način slanja na post jer se to koriste u 99,9% slučajeva. Našoj formi sam dao i ime – forma
Sada zaronimo u svijet elemenata forme. Prva stvar koju trebate razumjeti je da su gotovo svi elementi oznaka jedina razlika je u atributu tip kod ovih oznaka. Dozvolite mi da navedem korištene elemente obrasca:
Siguran sam da ste ovakva polja vidjeli više puta, pa evo šta kažu: "bez komentara"
Sada napravimo mali upitnik za obuku, s kojim ćemo dalje raditi. Naš zadatak je da napravimo mali upitnik koji će nam reći ime osobe koja ga popunjava, spol, iz koje je zemlje, omiljenu boju i tekstualno polje u koje korisnik može dodati nešto o sebi. Evo šta sam dobio: