Oglašavanje inurl c ploča cgi cmd. “Indija jeftini cialis inurl pročitajte cgi ploču. Brzi vodič o HTML obrascima
Kako ispravno pretraživati pomoću google.com
Svatko vjerojatno zna kako koristiti tražilicu poput Googlea =) Ali ne znaju svi da ako ispravno sastavite upit za pretraživanje pomoću posebnih konstrukcija, možete postići rezultate onoga što tražite mnogo učinkovitije i brže =) U ovom članku Pokušat ću pokazati to i što trebate učiniti da biste ispravno pretraživali
Google podržava nekoliko naprednih operatora pretraživanja koji imaju posebno značenje prilikom pretraživanja na google.com. Obično te izjave mijenjaju pretraživanje ili čak govore Googleu da izvrši potpuno različite vrste pretraživanja. Na primjer, dizajn veza: je poseban operator, a zahtjev poveznica: www.google.com neće vam ponuditi normalno pretraživanje, već će umjesto toga pronaći sve web stranice koje imaju veze na google.com.
alternativne vrste zahtjeva
predmemorija: Ako uključite druge riječi u svoj upit, Google će istaknuti te uključene riječi unutar predmemoriranog dokumenta.
Na primjer, cache:www.web stranicaće prikazati sadržaj u predmemoriji s istaknutom riječi "web".
veza: Gornji upit za pretraživanje prikazat će web stranice koje sadrže poveznice na navedeni upit.
Na primjer: poveznica: www.site prikazat će sve stranice koje imaju vezu na http://www.site
povezano: Prikazuje web stranice koje su "povezane" s navedenom web stranicom.
Na primjer, povezano: www.google.com izlistat će web stranice koje su slične Googleovoj početnoj stranici.
info: Informacije o upitu: predstavit će neke informacije koje Google ima o web stranici koju tražite.
Na primjer, info: web stranica pokazat će informacije o našem forumu =) (Armada - Forum za odrasle webmastere).
Ostali zahtjevi za informacijama
definirati: Upit define: pružit će definiciju riječi koje unesete nakon njega, prikupljenu iz različitih izvora na mreži. Definicija će biti za cijelu unesenu frazu (to jest, uključit će sve riječi u točnom upitu).
dionice: Ako započnete upit s dionicama: Google će ostatak upita obraditi kao simbole dionica i povezati se na stranicu koja prikazuje gotove informacije za te simbole.
Na primjer, dionice:Intel yahoo pokazat će informacije o Intelu i Yahoou. (Imajte na umu da biste trebali upisati simbole udarnih vijesti, a ne naziv tvrtke)
Modifikatori upita
stranica: Ako uključite site: u svoj upit, Google će ograničiti rezultate na one web stranice koje pronađe u toj domeni.
Također možete pretraživati po pojedinačnim zonama, kao što su ru, org, com itd. ( web mjesto:com web mjesto: ru)
sav naslov: Ako pokrenete upit s allintitle:, Google će ograničiti rezultate na sve riječi upita u naslovu.
Na primjer, allintitle: google pretragaće vratiti sve Google stranice pretraživanjem kao što su slike, blog itd
naslov: Ako uključite intitle: u svoj upit, Google će ograničiti rezultate na dokumente koji sadrže tu riječ u naslovu.
Na primjer, naslov: Posao
allinurl: Ako pokrenete upit s allinurl: Google će ograničiti rezultate na sve riječi upita u URL-u.
Na primjer, allinurl: google pretraživanje vratit će dokumente s googleom i pretraživati u naslovu. Također, kao opciju, riječi možete odvojiti kosom crtom (/) tada će se riječi s obje strane kose crte pretraživati unutar iste stranice: Primjer allinurl: foo/bar
inurl: Ako uključite inurl: u svoj upit, Google će ograničiti rezultate na dokumente koji sadrže tu riječ u URL-u.
Na primjer, Animacija inurl:site
tekst: pretražuje samo navedenu riječ u tekstu stranice, zanemarujući naslov i tekstove poveznica, i druge stvari koje nisu vezane uz. Postoji i izvedenica ovog modifikatora - sav tekst: oni. dalje će se sve riječi u upitu pretraživati samo u tekstu, što također može biti važno, zanemarujući često korištene riječi u poveznicama
Na primjer, intext:forum
Raspon datuma: pretražuje u vremenskom okviru (raspon datuma: 2452389-2452389), datumi za vremena navedeni su u julijanskom formatu.
Pa, i svakakvih zanimljivih primjera upita
Primjeri pisanja upita za Google. Za spamere
Inurl:control.guest?a=sign
Site:books.dreambook.com “URL početne stranice” “Potpiši moj” inurl:znak
Web stranica: www.freegb.net Početna stranica
Inurl:sign.asp “Broj znakova”
“Poruka:” inurl:sign.cfm “Pošiljatelj:”
Inurl:register.php “Registracija korisnika” “Web stranica”
Inurl:edu/guestbook “Upišite se u knjigu gostiju”
Inurl:post “Objavi komentar” “URL”
Inurl:/archives/ “Komentari:” “Sjećate li se informacija?”
“Skriptu i knjigu gostiju izradio:” “URL:” “Komentari:”
Inurl:?action=add “phpBook” “URL”
Naslov: "Pošalji novu priču"
Časopisi
Inurl:www.livejournal.com/users/ mode=reply
Inurl greatestjournal.com/ mode=reply
Inurl:fastbb.ru/re.pl?
Inurl:fastbb.ru /re.pl? "Knjiga gostiju"
blogovi
Inurl:blogger.com/comment.g?”postID””anonymous”
Inurl:typepad.com/ “Objavi komentar” “Sjećaš li se osobnih podataka?”
Inurl:greatestjournal.com/community/ “Objavi komentar” “adrese anonimnih postera”
“Objavi komentar” “adrese anonimnih postera” -
Naslov: "Objavi komentar"
Inurl:pirillo.com “Objavi komentar”
Forumi
Inurl:gate.html?”name=Forumi” “mode=odgovor”
Inurl:”forum/posting.php?mode=reply”
Inurl:"mes.php?"
Inurl:”members.html”
Inurl:forum/memberlist.php?"
Iskusan sam i komercijalno usmjeren voditelj marketinga s 13 godina iskustva. Vješt u izradi strategija i dizajniranju inovativnih marketinških planova za poticanje online i offline konverzija kroz više kanala. Strastveni prema razvoju automatiziranih složenih marketinških procesa i putovanja s mjernim podacima koji se mogu pratiti, dok
uvijek držeći povrat ulaganja kao temeljni fokus. Uvjeren u izgradnji i zapošljavanju timova za tehničku podršku, marketing, korisničku službu i račune.
SAŽETAK KARIJERE
Travelopo.com / voditelj marketinga
Strateško upravljanje glavnim računima, uključujući Booking.com,
HomeAway, Expedia, AirBnB, TripAdvisor, Hometogo & Holidu.
Odgovoran za zapošljavanje razvojnih timova, tehničkih timova, timova za marketing, račune i korisničku podršku.
Odgovoran za pronalaženje i upravljanje vanjskim marketinškim, PR i razvojnim agencijama.
Odgovoran za upravljanje kanalima (Kigo, Avantio & Rentals United), uključujući rast sa 70 na 520 dobavljača nekretnina u 2 godine.
Upravljanje svim na web mjestu SEM, PPC, SEO, UX i CRO & PR.
Izgradnja partnerstva sa 100 članova medija i društvenih utjecaja, s 40 novinarskih putovanja između 2016. i 2018., uključujući međunarodne časopise i novine i utjecajne osobe.
Odgovoran za izradu cjelokupnog unutarnjeg izvješćivanja koristeći Salesforce CRM rješenje (profit & gubitak, dužnici & vjerovnici & profitabilnost upita i rješenja za kanale za rezervacije).
Upravljanje integracijom Salesforce CRM rješenja po mjeri, web stranice i rješenja za unos podataka.
Kompetentan za Salesforce, Google platforme Social Platforms, AutopilotHQ, Segment.com, Mouseflow i GIT, Basecamp, Jira (Agile development) & SEO alate za izvješćivanje (SEMrush, RavenTools, Ahrefs).
Odgovoran za osiguravanje usklađenosti s PCI & GDPR.
Odgovoran za pronalaženje i razvoj novih izlaznih kanala.
Glavne brojke iz posljednje 2 godine: rast od 300% iz godine u godinu, rast s našim najvećim dobavljačem, rast dobavljača nekretnina od 700%, rast ponude nekretnina od 280%.
Cai Thomas Online Marketing/Osnivač
Nudi savjetovanje i marketinške usluge za brojne luksuzne robne marke u Ujedinjenom Kraljevstvu.
Razvijanje strateških SEO, SEM, PPC i affiliate reklamnih kampanja.
Upravljanje marketinškim kampanjama vođeno KPI-jem.
10.000% povrata ulaganja za nacionalnu tvrtku za obuku dentalnih implantata.
Vanjske strane upravljanja uključujući Groupon, Living Social i Amazon.
Postizanje rezultata na prvoj stranici za sve proizvode koji se nude za sve lokacije na lokalnoj i regionalnoj razini u sektorima kao što su kozmetičke ordinacije, luksuzne tkanine, kupaonice i mjesta za vjenčanja.
Odgovoran za pronalaženje izvođača iz globalnih mreža za rad na klijentovim projektima.
Cijeli život/voditelj marketinga
Odgovoran za upravljanje cjelokupnim marketingom i razvojem unutar grupe usmjereno na učinak. Razvoj poslovanja koji opskrbljuje primatelje franšize s više milijuna funti poslovanja godišnje, s kampanjama koje postižu ROI od 3500%
Upravljanje marketinškim kampanjama za klijente vođeno KPI-jem.
Rast od 8.000% u stvaranju potencijalnih klijenata u razdoblju od 12 mjeseci.
500% ROI na kozmetičke kampanje.
Upravljane vanjske stranke uključuju Groupon, Living Social i Amazon.
Odgovoran za planiranje, razvoj, testiranje i uvođenje mreže stranica za rezervacije koristeći sustave kao što su Bookly, WordPress i BookingBug.
UX i optimizacija vođena podacima za povećanje konverzija.
Postizanje rezultata na prvoj stranici za sve proizvode koji se nude za sve lokacije pomoću SEO-a.
PC Dial (PCD IT SUPPORT LTD)/ direktor
Suosnivač sam i upravljao PCD IT Support Ltd nakon što sam primio 4 kompleta ulaganja od investitora. PC Dial nudi proaktivnu IT podršku za mala i srednja poduzeća diljem Ujedinjenog Kraljevstva. S velikim popisom pretplaćenih mjesečnih klijenata. PC Dial brzo je postao poznata tvrtka za daljinsku IT podršku, specijalizirana za agente za nekretnine. Ovaj posao još uvijek vodi moj zet.
Odgovoran za povećanje popisa pretplatnika koji plaćaju na 100 korisnika mjesečne podrške.
Pružanje besplatnih lekcija računala za lokalno područje, uključujući lokalne škole za starije osobe.
Izlagao na nacionalnim događajima za mala i srednja poduzeća, kao što je Small Business Show.
Odgovoran za stvaranje partnerstava s globalnim sigurnosnim markama kao što je FSecure.
Certificiran za Google Partner Program, Microsoft SBS i Google AdWords / Analytics programe.
Odgovorno ili zapošljava i obučava osoblje koje sudjeluje u nacionalnom programu pripravnika.
Alternativne kupaonice / voditelj online marketinga
Upravljanje, razvoj, rast i upravljanje operacijama za jedan od najvećih internetskih lanaca luksuznih kupaonica u Ujedinjenom Kraljevstvu.
Odgovoran za postizanje rasta od 550% u 9 mjeseci, premašivši sve ciljeve KPI-ja.
Kao tvrtka povećali smo asortiman proizvoda sa 100 proizvoda na više od 10.000
proizvoda.
Pronalaženje novih partnera i dobavljača, povoljno govoreći, komercijalno isplative cijene.
Osim toga, poduzimanje online oglašavanja za sestrinske robne marke sa sjedištem u izložbenom prostoru.
Odgovoran za sve SEM, SEO, PPC i offline oglašavanje, uključujući
upravljanje vanjskom PR agencijom.
Upravljanje operativnim i administrativnim osobljem u okviru moje funkcije voditelja online marketinga.
Ovo razdoblje zaposlenja uključivalo je prijenos topbrandbathrooms.com između Colorwash Bathrooms i The Alternative Bathroom Company nakon prodaje poslovanja i menadžerskog otkupa.
SkyLineSolar.co.uk/Osnivač
Osnovao, razvio i upravljao SkyLineSolar od travnja 2006. do listopada 2007. (FT), kako bih financirao svoje sveučilišno obrazovanje.
Odgovoran za pronalaženje dobavljača i proizvoda iz cijelog svijeta.
Sav promet generiran potpuno organski iz SEO-a.
Naručio sam i dizajnirao web stranicu OS-commerce.
Odgovoran za sve korisničke usluge i prodaju, dok se povezuje s tiskom radi stvaranja PR-a i besplatnih reklama u zamjenu za recenzije.
Prodao sam tvrtku zbog akademskog vremenskog ograničenja.
SAŽETAK KARIJERE
BSC geografija i upravljanje okolišem t, 2:1– Sveučilište zapadne Engleske – 2009
Geografija, kemija i poslovne studije A razine– Backwell Comprehensive School – 2005
HOBIJI & INTERESI
Volim putovati i jesti vani, šetati naša dva psa, uživati u vremenu sa suprugom i dječačićem. Uživam čitati i slušati knjige koje se uglavnom fokusiraju na znanost, ekonomiju i politiku.
Kao sporedni projekt za ažuriranje svog znanja, upravljam i automatiziram višestruke račune na društvenim mrežama, pri čemu 4 najveća imaju 70 tisuća, 50 tisuća, 35 tisuća i 20 tisuća Instagram pratitelja, s korisnikom
poslani sadržaj je jedini izvor sadržaja, s objavama koje redovito generiraju više od 2K organskih angažmana (lajkovi/komentari).
Članak već duže vrijeme kruži internetom, ali kao autor smatram da ga imam pravo ponovno objaviti ovdje. Mnogo toga (ako ne i sve) što je ovdje napisano je zastarjelo i može se na prvi pogled činiti beskorisnim, ali nakon što sam prošao ovaj put, 6 godina kasnije mogu reći da nije bio suvišan. Tako.
U ovom članku želim govoriti o CGI sučelju općenito, njegovoj implementaciji za Windows i korištenju asemblerskog jezika posebno pri pisanju CGI programa. Opseg ovog članka ne uključuje potpuni opis CGI-ja, jer na Internetu postoji jednostavno more materijala o ovoj temi i jednostavno ne vidim smisao prepričavati sve ovdje.
CGI teorija
CGI – (Common Gateway Interface)– Zajedničko sučelje pristupnika. Kao što možda pretpostavljate, ovo sučelje služi kao pristupnik između poslužitelja (ovdje mislim na poslužiteljski program) i nekog vanjskog programa napisanog za OS na kojem se upravo taj poslužitelj pokreće. Dakle, CGI je odgovoran za točno kako će se podaci prenijeti iz poslužiteljskog programa u CGI program i natrag. Sučelje ne nameće nikakva ograničenja u čemu bi trebao biti napisan CGI program; to može biti obična izvršna datoteka ili bilo koja druga datoteka - glavna stvar je da je poslužitelj može pokrenuti (u Windows okruženju, na primjer, može biti datoteka s ekstenzijom vezanom za bilo koji program).Od trenutka kada ste pozvali (na primjer, kliknuli gumb obrasca kojem je priložen poziv CGI programa) CGI program dok ne dobijete rezultat u prozoru preglednika, događa se sljedeće:
- Web klijent (na primjer preglednik) stvara vezu s poslužiteljem navedenim u URL-u;
- Web klijent šalje zahtjev poslužitelju, ovaj zahtjev se obično vrši pomoću dvije metode GET ili POST;
- Podatke iz zahtjeva klijenta (primjerice, vrijednosti polja obrasca) poslužitelj prenosi pomoću CGI sučelja u CGI program naveden u URL-u;
- CGI program obrađuje klijentske podatke dobivene od servera i na temelju te obrade generira odgovor klijentu koji preko istog CGI sučelja šalje serveru, a on ga direktno šalje klijentu ;
- Poslužitelj prekida vezu s klijentom.
Standardna CGI specifikacija pretpostavlja da poslužitelj može komunicirati s programom na sljedeće načine:
- Varijable okruženja – može ih postaviti poslužitelj kada se program pokrene;
- Standardni ulazni tok (STDIN) – pomoću njega poslužitelj može prenijeti podatke u program;
- Standardni izlazni tok (STDOUT) – program u njega može upisati svoj izlaz koji se šalje poslužitelju;
- Naredbeni redak – u njemu poslužitelj može proslijediti neke parametre programu.
Standardni ulazno/izlazni tokovi vrlo su praktični i naširoko se koriste na UNIX sustavima, što se ne može reći za Windows, tako da postoji CGI specifikacija razvijena posebno za Windows sustave, nazvana "Windows CGI". Ali, naravno, standardni ulazno/izlazni tokovi također se mogu koristiti u Windows CGI programiranju. Ovdje se neću doticati “Windows CGI” standarda, a za to postoje najmanje dva razloga - prvi, i najvažniji, je da trenutno svi http poslužitelji za Windows ne podržavaju ovu specifikaciju (osobito moj omiljeni Apache 1.3.19). Drugi razlog možete vidjeti ako u bilo koju tražilicu upišete "Windows CGI". Navest ću samo opće pojedinosti o ovom sučelju - svi podaci s poslužitelja na klijenta prenose se putem datoteke koja je uobičajena za Windows *.ini, a čiji se naziv prosljeđuje programu u naredbenom retku. U ovom slučaju, svi podaci u datoteci već su pažljivo podijeljeni u odjeljke od strane poslužitelja i sve što trebate učiniti je koristiti funkcije "GetPrivateProfile*" da ih izdvojite odatle. Odgovor se ponovno šalje poslužitelju putem datoteke čije je ime navedeno u odgovarajućem unosu u ini datoteci.
Koje podatke klijent može prenijeti u CGI program? - gotovo bilo koji. Općenito, programu se prosljeđuju vrijednosti polja obrasca koje klijent popunjava, ali to također može biti neka vrsta binarnih podataka, na primjer, datoteka sa slikom ili glazbom. Podaci se mogu prenijeti na poslužitelj na dvije različite metode - metodom GET i metodom POST. Kada kreiramo obrazac za ispunjavanje na našoj stranici, izričito naznačimo kojim od navedenih načina želimo poslati podatke koje je korisnik unio, to se radi u glavnoj oznaci obrasca otprilike ovako:
Prilikom slanja podataka metodom GET, preglednik čita podatke iz obrasca i postavlja ih iza URL-a skripte, iza upitnika; ako u obrascu ima više značajnih polja, sva se prenose preko znaka “&”. , naziv polja i njegova vrijednost zapisani su u URL-u kroz znak “” =". Na primjer, zahtjev koji generira preglednik iz obrasca kada kliknete na gumb na koji je priložena skripta “/cgi-bin/test.exe”, uzimajući u obzir da se prvo polje obrasca zove “vaše_ime” , drugi – “your_age”, može izgledati ovako:
GET /cgi-bin/test.exe?your_name=Pupkin&your_age=90 HTTP/1.0
Korištenje GET metode ima nekoliko slabosti – prva i najvažnija je jer Podaci se prenose u URL-u, a zatim ima ograničenje količine tih prenesenih podataka. Druga slabost opet proizlazi iz URL-a - to je povjerljivost, s takvim prijenosom podaci ostaju apsolutno otvoreni. Dakle, dobro je ako imamo 2-3 mala polja u obrascu... postavlja se pitanje što ako ima više podataka? Odgovor je koristiti POST metodu!
Kada koristimo POST metodu, podaci se prenose na poslužitelj kao blok podataka, a ne u URL-u, što donekle oslobađa ruke za povećanje količine prenesenih informacija; za gornji primjer POST forme, blok poslani poslužitelju bit će nešto poput ovoga:
POST /cgi-bin/test.exe HTTP/1.0
Prihvati: tekst/običan
Prihvati: tekst/html
Prihvati: */*
Content-type: application/x-www-form-urlencoded
Dužina sadržaja: 36
your_name=Pupkin&your_age=90
Kao što je gore spomenuto, nakon primitka podataka, poslužitelj ih mora pretvoriti i proslijediti CGI programu. U standardnoj CGI specifikaciji, klijentski unos za GET zahtjev postavlja poslužitelj u programsku varijablu okoline "QUERY_STRING". Kada se napravi POST zahtjev, podaci se smještaju u standardni ulazni tok aplikacije, gdje ih ona može pročitati. Osim toga, kod takvog zahtjeva poslužitelj postavlja još dvije varijable okruženja - CONTENT_LENGTH i CONTENT_TYPE, po kojima se može prosuditi duljina zahtjeva u bajtovima i njegov sadržaj.
Osim samih podataka, poslužitelj postavlja i druge varijable okruženja pozvanog programa, evo nekih od njih:
REQUEST_METHOD
Točno opisuje kako su podaci dobiveni
Primjer: REQUEST_METHOD=GET
QUERY_STRING
Niz upita ako je korištena metoda GET
Primjer: QUERY_STRING= vaše_ime=Pupkin&vaša_dob=90&hobby=asm
CONTENT_LENGTH
Duljina u bajtovima tijela zahtjeva
Primjer: CONTENT_LENGTH=31
CONTENT_TYPE
Zatražite vrstu tijela
GATEWAY_INTERFACE
Verzija CGI protokola
Primjer: GATEWAY_INTERFACE=CGI/1.1
REMOTE_ADDR
IP adresa udaljenog hosta, odnosno klijenta koji je kliknuo gumb u obrascu
Primjer: REMOTE_ADDR=10.21.23.10
REMOTE_HOST
Naziv udaljenog glavnog računala, to može biti naziv njegove domene ili, na primjer, naziv računala u Windows okruženju; ako se oni ne mogu dobiti, tada polje sadrži njegov IP
Primjer: REMOTE_HOST=wasm.ru
SCRIPT_NAME
Naziv skripte korištene u zahtjevu.
Primjer: SCRIPT_NAME=/cgi-bin/gols.pl
SCRIPT_FILENAME
Naziv datoteke skripte na poslužitelju.
Primjer: SCRIPT_FILENAME=c:/page/cgi-bin/gols.pl
SERVER_SOFTVER
Poslužiteljski softver
Primjer: Apache/1.3.19 (WIN32)
Pozvani CGI program može pročitati bilo koju od svojih varijabli okruženja koje je postavio poslužitelj i koristiti ih u svoju korist.
Općenito, ovo je sve ukratko, za detaljnije informacije o Common Gateway Interface pogledajte specijaliziranu dokumentaciju, ovaj sam opis napravio kako bih vas podsjetio, a ako niste znali, onda vas informirao. Pokušajmo nešto učiniti u praksi.
Praktični dio
Za vježbu će nam trebati barem 3 stvari - neka vrsta http poslužitelja za Windows, isprobao sam sve primjere na Apache 1.3.19 za Windows, poslužitelj je besplatan, možete ga preuzeti sa iDa, i trebat će nam poslužitelj, ne bilo koji, već konfiguriran za pokretanje CGI skripti! Pogledajte dokumentaciju kako to učiniti za poslužitelj koji koristite. Druga stvar koja nam treba je, naravno, asembler; također je potrebno da kompajler podržava izradu WIN32 konzolnih aplikacija, ja koristim Tasm, ali Fasm i Masm i mnogi drugi *asmi su savršeni. I na kraju, najvažnije je da je ta želja potrebna.
Dakle, pretpostavljam da ste poslužitelj uspješno instalirali i konfigurirali, tako da u korijenskom direktoriju dokumenata poslužitelja postoji datoteka index.html, koja se savršeno prikazuje u pregledniku kada upišete adresu 127.0.0.1. Također ću uzeti u obzir da negdje u džungli poslužiteljskih mapa postoji mapa “cgi-bin” u kojoj je dopušteno pokretanje skripti.
Provjerimo postavke poslužitelja i istovremeno napišemo malu skriptu. Naša skripta bit će obična *.bat datoteka. Predviđam pitanja - kako? stvarno? Da, ovo je obična batch datoteka, kao što je gore spomenuto, CGI specifikacija ne razlikuje vrste datoteka, glavna stvar je da je poslužitelj može pokrenuti, a ona zauzvrat ima pristup stdin/stdout i varijablama okruženja, bat file, čak i ne u potpunosti, ali za primjer će nam sasvim dobro odgovarati. Kreirajmo datoteku približno sljedećeg sadržaja:
@echo isključen
rem Naslov zahtjeva
echo Tip sadržaja: tekst/html
jeka.
rem Tijelo zahtjeva
echo "Zdravo!
echo "GET zahtjev poslao je sljedeće podatke: %QUERY_STRING%
Nazovimo datoteku test.bat i smjestimo je u direktorij za pokretanje skripti, najvjerojatnije će to biti direktorij “cgi-bin”. Sljedeća stvar koju trebamo učiniti je pozvati ovu skriptu na neki način, u principu, to se može učiniti izravno upisivanjem nešto poput sljedećeg “http://127.0.0.1/cgi-bin/test.bat” u adresu preglednika prozor, ali neka Pozovemo ga s naše glavne stranice, a ujedno provjerimo rad metode GET. Kreirajmo datoteku index.html u korijenu poslužitelja sa sljedećim sadržajem:
Sada, kada uđete na poslužitelj (http://127.0.0.1 u adresnoj traci preglednika), trebao bi se pojaviti obrazac, upišite nešto u njega i kliknite na gumb "pošalji", ako je sve napravljeno kako treba, vidjet ćete odgovor iz naše skripte bat- u prozoru preglednika. Sada da vidimo do čega smo došli.
Kao što možda pretpostavljate, naredba "echo" izlazi u stdout; prije svega, prosljeđujemo zaglavlje našeg odgovora poslužitelju - "echo Content-type: text/html". Ovo je standardno zaglavlje CGI specifikacije, koje označava da želimo prenijeti tekst ili html dokument; postoje i druga zaglavlja. Vrlo važna točka je da zaglavlje mora biti odvojeno od tijela odgovora praznim linijom, što činimo sljedećom naredbom “echo.” Zatim se prenosi tijelo samog odgovora - ovo je običan html dokument, u tijelu dokumenta, radi jasnoće, prikazujem jednu od varijabli okruženja koje nam je proslijedio poslužitelj - "QUERY_STRING", kao što je već spomenuto s metodom GET (a to je upravo naš slučaj), sve se prenosi u ovoj varijabli korisnički unesenih podataka, što možemo vidjeti u odgovoru skripte. Možda ste primijetili da "navodnici nisu na svom mjestu" u posljednja 2 retka datoteke, odmah nakon "echo", oni su tu zbog specifičnosti bat datoteka, kao što vidite da su html oznake okružene likovi “<» и «>“, ujedno ti simboli služe kao ulazno/izlazna preusmjeravanja u bat datotekama, te ih stoga ovdje ne možemo slobodno koristiti.
Preporučam da se malo poigrate s takvim bat skriptama, može biti vrlo korisno, pokušajte pogledati druge varijable okruženja. Reći ću malo, skrećući s teme, na UNIX sustavima, jezici interpretatora naredbi vrlo su razvijeni i granica između programiranja u jeziku interpretatora naredbi i programiranja u "pravom" programskom jeziku vrlo je, vrlo nejasna u u nekim slučajevima, tako da su jednostavne skripte često napisane na UNIX sustavima posebno u jezicima tumača naredbi, ali Windows tumač cmd.exe ili, ranije, command.com očito su slabi za te svrhe.
Sada prijeđimo na najvažniji zadatak ovog članka, na pisanje CGI programa u asembleru. U principu, ako uzmemo u obzir sve gore navedeno o CGI-ju, možemo izvući zaključak o tome što CGI sučelje zahtijeva od našeg programa:
- Program mora moći čitati standardni unos (stdin) kako bi pristupio podacima poslanim POST metodom;
- Program mora moći pisati u standardni izlazni tok (stdout) kako bi prenio rezultat svog rada na poslužitelj;
- Iz prve dvije točke proizlazi da kako bi poslužitelj poslao nešto našem programu u stdin, a da bi on na to odgovorio u stdout, CGI program mora biti konzolna aplikacija;
- Naš program mora moći čitati svoje varijable okoline.
Počnimo s posljednjom točkom. Za pristup varijablama okruženja Windows aplikacije koristi se API funkcija “GetEnvironmentStrings”, funkcija nema argumenata i vraća pokazivač na niz varijabli okruženja (NAME=VALUE) odvojenih nulom, niz se zatvara s dvostruka nula, kada se program pokrene od strane poslužitelja u programskom okruženju uz standardne varijable dodaju se i specifične CGI varijable opisane gore; kada pokrenete program iz naredbenog retka, nećete ih vidjeti, naravno.
Kako bismo napisali nešto u stdout ili pročitali iz stdin-a, prvo moramo dobiti ručke ovih tokova, to se radi pomoću API funkcije "GetStdHandle", jedna od sljedećih vrijednosti prosljeđuje se kao parametar funkcije:
- STD_INPUT_HANDLE - za stdin (standardni unos);
- STD_OUTPUT_HANDLE - za stdout (standardni izlaz);
- STD_ERROR_HANDLE - za stderr.
Funkcija će vratiti oznaku koja nam je potrebna za operacije čitanja/pisanja. Sljedeća stvar koju trebamo učiniti je pisati/čitati ove streamove. To se radi normalnim operacijama čitanja/pisanja datoteka, tj. ReadFile i WriteFile. Postoji jedna suptilnost ovdje, možda mislite da možete koristiti WriteConsole/ReadConsole za ove svrhe, ali to je stvarno točno za konzolu i radit će odlično, rezultati će, baš kao i s WriteFileom, biti izlazni na konzolu, ali ovo nastavit će se sve dok ne pokrenemo naš program kao skriptu na poslužitelju. To se događa jer kada poslužitelj pokrene naš program, ručke koje vraća funkcija “GetStdHandle” više neće biti ručke konzole kao takve, već će biti ručke cijevi, što je neophodno za povezivanje dviju aplikacija.
Evo malog primjera kako bi CGI program trebao izgledati u asemblerskom jeziku:
386
.model flat,stdcall
includelib import32.lib
.konst
PAGE_READWRITE = 4h
MEM_COMMIT = 1000h
MEM_REZERVA = 2000h
STD_INPUT_HANDLE = -10
STD_OUTPUT_HANDLE = -11
Podaci
hStdout dd ?
hStdin dd ?
hMem dd ?
Zaglavlje:
db "Vrsta sadržaja: tekst/html",13,10,13,10,0
početak_html:
db" CGI programsko okruženje izgleda ovako:
",13,10,0
za_stdin:
db" STDIN programa sadrži:
",13,10,0
kraj_html:
Db "",13,10,0
npisano dd?
toscr db 10 dup (32)
db " - Vrsta datoteke",0
.kodirati
_početak:
X ili ebx, ebx
poziv GetStdHandle,STD_OUTPUT_HANDLE
mov hStdout,eax
poziv GetStdHandle,STD_INPUT_HANDLE
mov hStdin,eax
Poziv write_stdout, offset zaglavlje
poziv write_stdout, offset start_html
Poziv VirtualAlloc,ebx,1000,MEM_COMMIT+MEM_RESERVE,PAGE_READWRITE
mov hMem,eax
mov edi,eax
poziv GetEnvironmentStringsA
mov esi,eax
sljedeći_simbol:
mov al,
ili al, al
jz završni_string
mov,al
sljedeći_string:
cmpsb
jmp kratki sljedeći_simbol
završni_string:
mov ,">rb<"
dodaj edi,3
cmp bajt ptr ,0
jnz sljedeći_string
inc edi
stosb
poziv write_stdout, hMem
poziv write_stdout, offset for_stdin
Pozovite GetFileSize,,ebx
mov edi,hMem
poziv ReadFile,,edi, eax,offset nwritten, ebx
dodaj edi,
mov bajt ptr ,0
poziv write_stdout, hMem
poziv write_stdout, offset end_html
nazovite VirtualFree,hMem
poziv ExitProcess,-1
Write_stdout proc bufOffs:dword
poziv lstrlen,bufOffs
poziv WriteFile,,bufOffs,eax,offset nwritten,0
ret
pisanje_stdout endp
extrn GetEnvironmentStringsA:blizu
extrn GetStdHandle: blizu
extrn ReadFile: blizu
extrn WriteFile: blizu
extrn GetFileSize:blizu
extrn VirtualAlloc:blizu
extrn VirtualFree:blizu
extrn ExitProcess:blizu
extrn lstrlen:blizu
završava
kraj_početak
Izvršna datoteka se gradi pomoću naredbi:
tasm32.exe /ml test.asm
tlink32.exe /Tpe /ap /o test.obj
Ne zaboravite da program mora biti konzolni program.
Ovaj program možete pozvati pomoću gore opisanog html obrasca, samo trebate promijeniti ime test.bat u obrascu u test.exe i kopirati ga u /cgi-bin/ u skladu s tim, možete ga postaviti na POST u metodi zahtjeva , program ga obrađuje.
Također želim napomenuti da program možete pozvati na drugi način, možete stvoriti datoteku u cgi-bin direktoriju, na primjer test.cgi, s jednim redom “#!c:/_path_/test.exe” i pozovite ga u zahtjevima, a poslužitelj će zauzvrat pročitati njegov prvi red i pokrenuti exe datoteku, za to je potrebno da ekstenzija *.cgi bude navedena u postavkama http poslužitelja kao ekstenzija za skripte. S ovim pristupom, poslužitelj će pokrenuti naš program pomoću naredbenog retka “test.exe path_to_test.exe” ovo ima nekoliko prednosti - prva je da osoba koja pokreće našu skriptu neće ni pogoditi u čemu je skripta napisana, druga je način na koji nam se prenosi naziv datoteke s našom linijom, možemo, na primjer, dodati bilo koje postavke za našu skriptu u ovu datoteku, što pojednostavljuje otklanjanje pogrešaka, usput, ovako rade svi tumači - možda imate primijetio sam da u svim perl/php/etc programima postoji sličan redak - koji ukazuje na sam interpreter naredbi. Dakle, kada poslužitelj pokrene cgi program, ako je ekstenzija programa registrirana kao skripta u postavkama, čita prvi redak datoteke, a ako se pokaže da je u gore opisanom formatu, tada pokreće program naveden u retku s nazivom ove datoteke iza kojeg slijedi razmak, recimo da je u retku naveden tumač bisera; nakon što je primio takav dar, počinje njegovo izvršenje, jer Komentar u Perlu je simbol "#", zatim preskače prvi redak i skripta se nastavlja izvršavati, općenito je to zgodna stvar.