Kako napisati zahtjev za dobijanje u adresnoj traci. PHP i GET i POST metode prijenosa podataka. php šalje podatke serveru

Prva metoda za izradu 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 koji se šalju. Mora biti u HTTP formatu stringa zahtjeva, tako da neki posebni znakovi moraju biti kodirani.

Počnimo s definiranjem samog servleta unutar oznake. Imajte na umu da se to dešava unutar oznake i da morate naznačiti da govorite o servletu koji smo definirali malo iznad: prosljeđujemo isto ime servleta za podudaranje. To jest, mapiranje servleta nema nikakve veze sa fizičkim direktorijumom u aplikaciji.

Ovo mapiranje je jednostavno dodijeljeno virtualno ime koje se koristi za pristup aplikaciji.


Bilo je nekoliko uobičajenih grešaka prethodnih godina.


Na primjer, da bismo upisali kontakt u bazu podataka, potrebno nam je vaše ime, adresa Email, adresu i datum rođenja. Imamo stranicu sa formom koju korisnik može popuniti i klikom na dugme ovi podaci bi trebali biti proslijeđeni servletu.

I u funkciji file_get_contents i u funkciji fread imamo dva nova parametra. Prvi je use_include_path. Pošto nastupamo HTTP zahtjev, u oba primjera će biti lažno . Kada koristite true za čitanje lokalni resurs funkcija će tražiti datoteku na include_path .

Drugi parametar, context, popunjava se povratnom vrijednošću stream_context_create, koja uzima vrijednost $aHTTP niza.

Ovaj kod ima formu definisanu oznakom. U ovom slučaju, specificiramo akciju na adresi, koja će biti servlet koji ćemo kreirati.


U okviru servisnog metoda našeg Servleta za dodavanje kontakata, primićemo podatke koji su poslani u zahtjevu. Ovo će vratiti string sa vrijednošću parametra. Ovaj izuzetak ukazuje da se ono što je proslijeđeno datumu ne može konvertirati u navedeni obrazac.

Datum koji je vraćen, želimo da kreiramo kalendar. Kao rezultat, naš servlet će izgledati ovako.


To je zbog činjenice da u našem obrascu ne definiramo kako slati podatke serveru putem atributa metode kako slijedi. Hoće li se korisniku pojaviti lijepa poruka?

Korištenje file_get_contents za izradu POST zahtjeva

Da pošaljete POST zahtjev u PHP-u koristeći file_get_contents , trebate koristiti stream_context_create da ručno popunite polja zaglavlja i odredite koja " omotač' će se 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;

Idealno bi bilo prikazati stranicu sa porukom o grešci "Došlo je do greške" i informacijama o tome kako obavijestiti administratora. Ova metoda je poznata kao omotač izuzetaka.


Svaki servlet mora imati konstruktor bez argumenata da bi ga kontejner mogao kreirati.

Važno je shvatiti da će vaš servlet biti instanciran samo jednom od strane kontejnera, i da će se taj pojedinačni objekt koristiti da zadovolji sve zahtjeve svih klijenata u odvojenim nitima. Prilikom inicijalizacije servleta, kada se parametri mogu čitati i varijable zajedničke za sve zahtjeve trebaju biti inicijalizirane, dobro je imati dobar provod učitavajući višestruke datoteke parametara aplikacije, na primjer.

Korištenje fread-a za izradu 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;

Konačno, moramo osloboditi moguće resurse koje držimo. To je zato što se metoda razlikuje od konstruktora. Kada proširimo klasu i kreiramo vlastiti konstruktor podređene klase, on poziva konstruktor roditeljske klase bez argumenata, zadržavajući garanciju poziva konstruktora. Isto se ne dešava sa metodama.

Sljedeći primjer pokazuje servlet koji implementira metode početka i kraja. Drugim riječima, podijelit će se među svim zahtjevima, a svi kupci će vidjeti istu vrijednost. Verovatno nije ono što želimo da radimo. Jednostavan primjer koji će nam pomoći da shvatimo da je ovo servlet sa varijablom za brojanje zahtjeva.

Izrada GET zahtjeva sa PHP-om

Sada ćemo skrenuti pažnju na korištenje fread i file_get_contents za preuzimanje sadržaja s interneta putem HTTP-a i HTTPS-a. Da biste koristili metode opisane u ovom članku, opcija fopen wrappers mora biti omogućena. Da biste to uradili, u datoteci php.ini morate parametar allow_url_fopen postaviti na On.

PHP POST i GET zahtjevi se koriste za prijavu na web stranice, preuzimanje sadržaja web stranica ili provjeru novih verzija aplikacija. Pojasnićemo kako napraviti jednostavne HTTP zahtjeve.

Nakon toga, za svaki zahtjev koji se uputi tom servletu, pošto je instanca uvijek ista, varijabla koja se koristi za inkrement će uvijek biti ista, i ispisaće trenutni broj na brojač. Znamo da nam dijeljenje varijabli između više niti može stvoriti ozbiljne probleme s sukobom. Ako dvije niti modificiraju istu varijablu u isto vrijeme, možemo izgubiti informacije čak iu jednostavnim slučajevima poput onih iznad.

Postoje dva rješenja za ovaj problem. Prvi je spriječiti dvije niti da pristupe istom kritičnom objektu u isto vrijeme; za ovo možemo sinkronizirati servisnu metodu. Ali to će donijeti mnogo problema s skalabilnosti. Drugo, jednostavnije rješenje je jednostavno ne dijeliti objekte između niti.

Korišćenje fread-a za preuzimanje ili primanje datoteka putem interneta

Zapamtite da je čitanje web stranice ograničeno na pristupačni dio paketa. Dakle, trebate koristiti funkciju stream_get_contents ( sličan file_get_contents) ili while petlja da pročitate sadržaj u manjim komadima dok se ne dostigne kraj datoteke:

Govoreći o servletima, dobra je praksa izbjegavati korištenje generičkih atributa. Cilj je vidjeti koncepte o kojima se raspravlja u praksi. . Zamislite ako želimo da navedemo svoje kontakte, kako to možemo učiniti? Ali hoće li biti ugodno? Šta ako jednog dana trebamo dodati novu kolonu u tabelu? Morali bismo ponovo kompajlirati klase i pustiti ažuriranje u eter.

Odredite svoj zadani pretraživač

Kako kurs napreduje, saznajemo da nije Najbolji način izvršiti ovu funkciju. Adresnu traku možete koristiti kao polje za pretragu. Ako ste pokušali da podesite pretraživač i on ne radi, možda je na vašem računaru instaliran zlonamerni softver.

U ovom slučaju se obrađuje PHP POST zahtjev, posljednji argument funkcije

Kreiranje Internet standarda Web 2.0 omogućilo je korisniku ne samo primanje informacija, već i aktivnu interakciju s drugim korisnicima i internet uslugama. Da bi se organizovale takve povratne informacije, u HTML jezik su uvedene dodatne oznake koje vam omogućavaju da pošaljete tražene informacije na server. Na primjer, to može biti obrazac za registraciju, ili obrazac za dodavanje komentara, ili postavljanje ličnog računa (stranice socijalna mreža) itd. U ovom poglavlju ćemo razmotriti skup oznaka koje vam omogućavaju da organizujete interakciju korisnika sa sajtom.

Dodavanje, mijenjanje ili uklanjanje drugih pretraživača

Savjeti za popunjavanje tekstualnih polja

Unesite tekst oznake koji želite koristiti za tražilicu. Ovu ključnu riječ možete unijeti u adresnu traku za brzi pristup tražilici. Unesite web adresu stranice rezultata pretrage i koristite % umjesto upita.

Da biste pronašli i promijenili web adresu stranice s rezultatima, slijedite ove korake: Koriste ih pretraživači za pristup raznim resursima objavljenim na Internetu. Na ovog trenutka nema elementa aktivne pedagogije. Određuje web server koji pretraživač kontaktira radi razmjene sadržaja. Ukazuje na tehničke "kapije" za pristup resursima servera. Obično ovaj isječak nedostaje jer pretraživač koristi standardne portove povezane s protokolima. U ranim danima Interneta, ovaj put je često odgovarao "fizičkom" putu na serveru.

6.1. GET i POST zahtjevi

Da bi organizovao interakciju korisnika sa Internetom, programer sajta mora da obezbedi prenos zahteva od korisnika sajta do servera na kojem se nalazi ova stranica. Postoje dvije vrste zahtjeva: GET i POST zahtjevi.

GET-zahtjevi

U ranim danima interneta postojali su samo GET zahtjevi. Oni predstavljaju prenos podataka direktno u adresnoj traci pretraživača, koji imaju sledeću sintaksu:

Sidro je, u izvesnom smislu, obeleživač u izvoru. Za audio ili video dokument, pretraživač će biti postavljen na tačku označenu sidrom. Navigacijski kontekst koji okružuje ugrađeni sadržaj naziva se roditeljski navigacijski kontekst. Svaki navigacijski kontekst ima svoju historiju sesije i aktivan dokument. . Hajde da objasnimo ovu razliku ovde.

Nije potrebno uključiti protokol ili port, ali su potrebni drugi dijelovi. Pogledajmo neke konkretne primjere kako bismo ilustrirali koncept. Ne može se ispustiti Ime domena bez preskakanja protokola. Posjetiocu objašnjavaju situaciju i ukazuju gdje se nalazi, šta radi i s kim komunicira na internetu. Neki pretraživači ih mogu koristiti za poboljšanje rangiranja stranica povezanih s određenim pojmom. Njima je lakše manipulisati. . Je li ovaj članak bio od pomoći?

http://domain/page?[option1=value1][&option2=value2]...

Ovdje skup podataka koji se prenosi na server počinje znakom '?' i odvojen je znakom '&'. Sami podaci su par

parametar=vrijednost

Na primjer, ako želite da prenesete ime i prezime korisnika na stranici za registraciju (na primjer, register.php) na mysite.com, to bi izgledalo ovako:

Pretražujte Internet koristeći adresnu traku

Možete pretraživati ​​Internet direktno iz adresne trake. Bićete preusmjereni na stranicu s rezultatima pretraživanja koristeći zadanu tražilicu. Ovaj članak objašnjava kako koristiti i konfigurirati ovu funkciju.

Koristite drugu tražilicu

Ako ne želite da koristite uslugu pretraživanja odabranu u traci za pretraživanje, možete unaprijed programirati ključne riječi za traženje ključne riječi za tražilicu koju želite. U članku Ključne riječi.

http://mysite.com/register.php?fname=Ivan&lname=Ivanov

Treba napomenuti da pretraživači zastarjelih verzija možda neće ispravno percipirati ćirilično pismo i prijenos ruskih slova će se izvršiti pogrešno. Bolje je prenijeti samo servisne informacije u GET zahtjevima u obliku brojeva i riječi na latinici.

Nedostatak GET zahtjeva je ograničeni prenos podataka. Na strani servera, string upita je ograničen na neku maksimalnu vrijednost. Na primjer, ako maksimalna veličina zahtjeva može biti 1024 karaktera, tada će sve što premašuje ovu vrijednost biti izbrisano i tada dio prenesenih informacija neće biti obrađivan od strane navedene stranice stranice. Drugo značajno ograničenje je mogućnost prenošenja strogo definisanih skupova znakova. Kao simboli? i & su već rezervirani i ne mogu se proslijediti kao vrijednosti parametara. Međutim, ovo pravilo se može zaobići ako se u stringu upita ne prenese sam znak, već njegova vrijednost koda. Da biste to učinili, koristite znak '%' iza kojeg slijedi kod karaktera, na primjer, ovako:

Deaktivirajte uslugu pretraživanja putem adresne trake

Promijenite prefiks ili sufiks

Možete navesti prefiks ili sufiks da dovršite imena domena. Jedna od glavnih karakteristika koje nude skriptni jezici na strani servera je kreiranje sadržaja na osnovu zahtjeva korisnika. Međutim, imajte na umu da je iz sigurnosnih razloga bolje zadržati status ove postavke.

Stranica šalje zahtjev serveru, prima ga, obrađuje, a zatim šalje odgovor praćen kodom odgovora. Neki od kodova odgovora su nam poznati - na primjer, kod 404 koji označava da nema adrese, ili 401 koji označava da nema autorizacije. Na klasičnim stranicama, da bi se prikazao sadržaj učitan sa servera, moramo ponovo učitati cijelu stranicu. A pošto to obično radimo asinhrono, korisnik još uvijek može koristiti našu stranicu u to vrijeme.

http://mysite.com/register.php?fname=%CC%DF%AD%1F%DS&lname=%DD

Ovdje su vrijednosti koda navedene u heksadecimalnom obliku kako bi se sačuvala dužina zahtjeva.

Uprkos ovim nedostacima, kreiranje sajtova bez GET zahteva bilo bi izuzetno teško. Na primjer, oni su neophodni u slučajevima početne inicijalizacije stranice web-mjesta za određenog korisnika, kada se u zahtjevu navode ne samo web lokacija i trenutna stranica, već i njen ID, kao što se radi na društvenoj mreži Vkontakte:

Takvu komunikaciju sa serverom realizuju dva Različiti putevi. Zahvaljujući tome, u budućnosti ćemo moći da imenujemo ovaj objekat isto za oba tipa pretraživača. Od sada imamo pristup metodama i svojstvima ovog objekta. Gore navedene metode i svojstva razmatraju se u nastavku. Prođimo kroz korake da se povežemo i odgovorimo.

Prvo kreiramo objekt veze. Prvi govori o vrsti veze. Drugi parametar je adresa servera. Asinhroni znači da stranica može nastaviti da radi kada se uspostavi ta veza. Zbog toga je potrebna serijalizacija podataka. Pomoću ovog obrasca možemo poslati bilo koju količinu podataka na server.

http://vk.com/profile.php?id=12345678

Takođe, GET zahtjevi se često koriste za provjeru ispravnosti email adrese prilikom registracije korisnika. U tom slučaju korisnik prima e-mail sa aktivacijskim linkom na navedeni email, a ovaj link je GET zahtjev.

POŠTA-zahtjevi

Da bi se riješili ovi nedostaci GET zahtjeva, dodani su POST zahtjevi koji vam omogućavaju prijenos velikih količina podataka u binarnom obliku, tj. bez izobličenja i promjena u prenesenim podacima. Takvi zahtjevi su pogodni za postavljanje datoteka i slika na server. Na primjer, kada korisnik postavi sliku na svoj profil društvene mreže, za to se koriste POST zahtjevi. Više detalja o organizaciji POST zahtjeva bit će razmotreno u nastavku.

Stoga, kao superheroji, moramo reći serveru koje podatke želimo da mu pošaljemo. Primjer slanja takvih neserijaliziranih podataka može izgledati ovako. Nakon što se podaci pošalju na server, server ih obrađuje i potom vraća nama. 0: veza nije uspostavljena, 1: veza uspostavljena, 2: zahtjev primljen, 3: obrada, 4: podaci vraćeni i spremni za upotrebu. Najviše nas zanima posljednja vrijednost.

Poziv je završen. Sada moramo provjeriti da li su naši podaci ispravno učitani. Da bismo testirali vezu, provjeravamo statusni kod odgovora. Popularan kod je, na primjer, kod greške 404, koji nam govori da stranica ne postoji. Pored navedenih kodova, postoji i kod 304, koji nam je važan jer znači da su vraćeni podaci identični podacima vraćenim u keš pretraživaču. Ne smijemo to tretirati kao grešku.