Objekt Request obsahuje metody pro práci s daty obsaženými v HTTP požadavku.
Tento objekt se používá např. pro přístup k datům formulářů.
Tento objekt poskytuje pouze jednu metodu.
Umožňuje přímé čtení dat odeslaných z formuláře, což je vhodné především pro zpracování uploadovaného souboru.
!!Pozor!! Před použitím metody BinaryRead nesmí být použita kolekce Form a před použitím kolekce Form nesmí být použita metoda BinaryRead.
Obsahuje informaci o počtu bytů v těle HTTP požadavku.
Příklad:
pocet_bytu = Request.TotalBytes data = Request.BinaryRead(pocet_bytu)
Objekt Request obsahuje několik kolekcí.
V případě zabezpečeného přístupu (např. technologií SSL) obsahuje tato kolekce informace o digitálním certifikátu klienta.
| Název | Datový typ | Popis |
|---|---|---|
| Certificate | String | Celý obsah certifikátu ve formátu ASN.1 (popsán ve standardu ISO 8824). Stručný popis v češtině naleznete zde. |
| Flags | Variant | Doplňkové informace o certifikátu. Hodnota ceCertPresent (1) znamená, že je certifikát přítomen. Hodnota ceUnrecognizedIssuer (2) znamená, že není znám vydavatel certifikátu. |
| Issuer | String (seznam hodnot oddělených čárkou) | Vydavatel certifikátu. Skládá se z několika samostatných hodnot, k nimž lze přistupovat i jednotlivě (viz níže). |
| SerialNumber | String | Sériové číslo certifikátu přidělené jeho vydavatelem. Sériové číslo je zapsáno jako hexadecimální reprezentace jednotlivých bytů oddělených pomlčkou, např. "04-67-F3-02". |
| Subject | String (seznam hodnot oddělených čárkou) | Obsahuje informace o návštěvníkovi, který se certifikátem prokazuje. Skládá se z několika samostatných hodnot, k nimž lze přistupovat i jednotlivě (viz níže). |
| ValidFrom | Date | Datum, kdy certifikát nabývá platnosti. |
| ValidUntil | Date | Datum, kdy vyprší platnost certifikátu. |
Přístup k jednotlivým údajům pole Issuer a Subject je možný tak, že k identifikátoru pole přidáme ještě kód z následující tabulky:
| Kód | Význam | |
|---|---|---|
| C | Country | Země |
| CN | Common Name | Příjmení (pouze u pole Subject) |
| GN | Given Name | Křestní (nebo první) jméno |
| I | Initials | Iniciály |
| L | Locality | Sídlo |
| O | Organization | Název firmy nebo organizace |
| OU | Organizational Unit | Název oddělení |
| S | State | Název státu nebo provincie |
| T | Title | Titul osoby nebo druh organizace |
Příklad použití:
strOrgName = Request.ClientCertificate("SubjectO")
Response.Write "Organizace uživatele certifikátu: " & strOrgName
Mechanismus cookies umožňuje webovému serveru ukládat informace (cookies) do souboru na počítači klienta.
Kolekce Request.Cookies slouží ke čtení těchto informací uložených u klienta, pro jejich zápis se používá kolekce Response.Cookies.
Každá cookie může být jednoduchá nebo vícehodnotová.
Jednoduchou cookie přečteme např. příkazem:
datumPosledniNavstevy = Request.Cookies("PoslNavsteva")
Vícehodnotové cookies jsou organizovány jako páry klíč/hodnota a používají se například pro ukládání dat z formuláře. Pro přístup k jednotlivým hodnotám vícehodnotové cookie se používá ještě další nepovinný parametr.
Příklad:
jmeno = Request.Cookies("OsobniUdaje", "Jmeno")
prijmeni = Request.Cookies("OsobniUdaje", "Prijmeni")
Response.Write "Jsme rádi, že se nás " & jmeno & " "
Response.Write prijmeni & " rozhodl opět navštívit :-)"
Každý prvek kolekce Request.Cookies je opět kolekcí, která má kromě standardních vlastností všech kolekcí navíc ještě atribut HasKeys.
Atribut HasKeys má hodnotu false, pokud jde o jednoduchou cookie. Jde-li o vícehodnotovou cookie, má atribut HasKeys hodnotu true.
Příklad:
For Each objItem In Request.Cookies
'Procházíme celou kolekci Request.Cookies
If Request.Cookies(objItem).HasKeys Then
'Našli jsme vícehodnotovou cookie
For Each objItemKey In Request.Cookies(objItem)
'Vypíšeme postupně všechny hodnoty vícehodnotové cookie
Response.Write objItem & "(" & objItemKey & ") = " & _
Request.Cookies(objItem)(objItemKey) & "<BR>"
Next
Else
'Našli jsem jednoduchou cookie, vypíšeme její hodnotu
Response.Write objItem & " = " & Request.Cookies(objItem) & "<BR>"
End If
Next
Každý prvek HTML formuláře může být pojmenován (atribut NAME), po odeslání formuláře jsou zadané hodnoty v ASP přístupné prostřednictvím tohoto jména.
Podle metody odesílání hodnot formuláře (atribut METHOD) jsou hodnoty přístupné přes kolekci Request.Form nebo Request.QueryString.
| Atribut METHOD | Jak se odesílají hodnoty z formuláře? | Kolekce zpřístupňující data |
|---|---|---|
| POST | V těle HTTP požadavku (v oblasti s volným formátem). | Form |
| GET | Připojené ke konci URL adresy. | QueryString |
Příklad:
Nadefinujeme si následující formulář.
<FORM ACTION="registrace.asp" METHOD="post"> Jméno: <INPUT TYPE="text" NAME="jmeno"><BR> Příjmení: <INPUT TYPE="text" NAME="prijmeni"><BR> <INPUT TYPE="submit"> </FORM>
Soubor registrace.asp potom bude obsahovat:
...
Response.Write "Jméno: " & Request.Form("jmeno") & "<BR>"
Response.Write "Příjmení: " & Request.Form("prijmeni") & "<BR>"
...
Některé prvky formuláře umožňují výběr více hodnot. V tom případě je možné z atributu Count zjistit počet vybraných hodnot.
Příklad:
V souboru request_form.asp si nadefinujeme formulář:
Zaškrtněte všechny jazyky, které znáte:<BR> <FORM ACTION="request_form.asp" METHOD="post"> <INPUT TYPE="checkbox" NAME="jazyk" VALUE="Angličtina">Angličtina</INPUT><BR> <INPUT TYPE="checkbox" NAME="jazyk" VALUE="Němčina">Němčina</INPUT><BR> <INPUT TYPE="checkbox" NAME="jazyk" VALUE="Francouzština">Francouzština</INPUT><BR> <INPUT TYPE="checkbox" NAME="jazyk" VALUE="Španělština">Španělština</INPUT><BR> <INPUT TYPE="checkbox" NAME="jazyk" VALUE="Italština">Italština</INPUT><BR> <INPUT TYPE="submit"><BR> </FORM>
Kód pro zpracování hodnot zadaných do formuláře bude vypadat následovně (bude ve stejném souboru hned za formulářem):
<%
If Request.Form("submit") <> "" Then
'Pokud již byl formulář odeslán, vyhodnotíme počet zaškrtnutých možností
If Request.Form("jazyk").Count <= 1 Then
Response.Write "Měl(a) byste na sobě ještě trochu zapracovat."
Else
Response.Write "Vaše jazykové znalosti jsou dobré.<BR>"
Response.Write "Byly zaškrtnuty následující jazyky:<BR><UL>"
For i = 1 To Request.Form("jazyk").Count
'Vypíšeme všechny označené možnosti
Response.Write "<LI>" & Request.Form("jazyk")(i) & "</LI>"
Next
Response.Write "</UL>"
End If
End If
%>
Tato kolekce se používá pro práci s daty odeslanými metodou GET, s touto kolekcí se pracuje úplně stejně jako s kolekcí Form. Rozdíl je jen ve způsobu odesílání dat od klienta na server.
Hodnoty z formuláře odesílaného metodou GET se předávají v kocové části URL adresy.
Příklad URL obsahující data z textových polí jmeno a prijmeni:
http://www.nejakyserver.cz/registrace.asp?jmeno=Josef&prijmeni=Svejk
Pro přístup k hodnotě zadané do textového pole jmeno se použije:
jmeno = Request.QueryString("jmeno")
Příklad práce s vícehodnotovými prvky formuláře:
V souboru request_querystring.asp si nadefinujeme formulář:
Zaškrtněte všechny jazyky, které znáte:<BR> <FORM ACTION="request_querystring.asp" METHOD="get"> <INPUT TYPE="checkbox" NAME="jazyk" VALUE="Angličtina">Angličtina</INPUT> <INPUT TYPE="checkbox" NAME="jazyk" VALUE="Němčina">Němčina</INPUT> <INPUT TYPE="checkbox" NAME="jazyk" VALUE="Francouzština">Francouzština</INPUT> <INPUT TYPE="checkbox" NAME="jazyk" VALUE="Španělština">Španělština</INPUT> <INPUT TYPE="checkbox" NAME="jazyk" VALUE="Italština">Italština</INPUT> <INPUT TYPE="submit"> </FORM>
Příklad URL obsahující data odeslaná z tohoto formuláře:
http://www.nejakyserver.cz/anketa.asp?jazyk=Angličtina&jazyk=Španělština
!!!Pozor!!! Uvedený příklad adresy byl zjednodušen. Ve skutečnosti se totiž v URL adrese používají jen 7-bitové kódy znaků, proto se znaky musí překódovávat.
Skript pro zpracování tohoto formuláře bude vypadat následovně:
<%
If Request.QueryString("submit") <> "" Then
'Pokud již byl formulář odeslán, vyhodnotíme počet zaškrtnutých možností
If Request.QueryString("jazyk") <= 1 Then
Response.Write "Měl(a) byste na sobě ještě trochu zapracovat."
Else
Response.Write "Vaše jazykové znalosti jsou dobré.<BR>"
Response.Write "Byly zaškrtnuty následující jazyky:<BR><UL>"
For i = 1 To Request.QueryString("jazyk").Count
Response.Write "<LI>" & Request.QueryString("jazyk")(i) & "</LI>"
Next
Response.Write "</UL>"
End If
End If
%>
Kolekce Request.ServerVariables obsahuje všechny HTTP hlavičky odeslané klientem v HTTP požadavku a navíc ještě některé systémové proměnné, týkající se daného webového serveru.
Všechny proměnné jsou pouze pro čtení (tzn. jejich hodnotu nelze měnit).
Hodnotu proměnné zjistíme příkazem:
hodnota = Request.ServerVariables(jméno_proměnné_HTTP)
Následující tabulka obsahuje seznam proměnných dostupných v kolekci ServerVariables:
| Jméno HTTP proměnné | Popis |
|---|---|
| ALL_HTTP | Všechny HTTP hlavičky odeslané klientem ve formě řetězce, jména v hlavičce jsou velkými písmeny, začínají prefixem "HTTP_" a pomlčky jsou nahrazeny podtržítky. |
| ALL_RAW | Všechny HTTP hlavičky v neupravené podobě, takže se hodnoty objeví přesně tak, jak byly klientem odeslány. |
| APPL_MD_PATH | Cesta uvedená pro aplikaci v metabázi, například "/LM/W3SVC/1/ROOT" |
| APPL_PHYSICAL_PATH | Fyzická cesta odpovídající cestě v metabázi, například "C:\Inetpub\wwwroot\". |
| AUTH_PASSWORD | Heslo zadané uživatelem, je-li nastavena autentifikace na Basic (základní) a Anonymous (anonymní přístup) je zakázán. |
| AUTH_TYPE | Metoda autentifikace použitá pro ověření uživatele, například "NTLM" nebo "BASIC". |
| AUTH_USER | Jméno zadané uživatelem, pokud je zakázána volba Anonymous. |
| CERT_COOKIE | Jedinečný identifikátor klientského cerifikátu, je-li poskytnut, je vrácen jako řetězec. |
| CERT_FLAGS | Hodnota příznaku má bit 0 nastaven na 1, pokud je přítomen klientský certifikát. Bit 1 je nastaven na 1, jestliže je uvedený certifikátový úřad neplatný nebo není uveden v seznamu známých CA (Certificate Authorities) na serveru. |
| CERT_ISSUER | Poskytovatel klientského certifikátu (Issuer), pokud je přítomen, je vrácen v kolekci ClientCertificate. |
| CERT_KEYSIZE | Počet bitů klíče připojení Secure Socket Layer, pokud se používá. |
| CERT_SECRETKEYSIZE | Počet bitů privátního klíče serverového certifikátu. |
| CERT_SERIALNUMBER | Sériové číslo klientského certifikátu, je-li přítomen. |
| CERT_SERVER_ISSUER | Poskytovatel serverového certifikátu, je-li přítomen. |
| CERT_SERVER_SUBJECT | Vlastník serverového certifikátu, je-li přítomen. |
| CERT_SUBJECT | Vlastník klientského certifikátu, je-li přítomen. |
| CONTENT_LENGTH | Délka obsahu požadavku klienta. |
| CONTENT_TYPE | Typ dat obsahu požadavku klienta, například "application/x-www-form-urlencoded" pro obsah formuláře. |
| GATEWAY_INTERFACE | Verze normy CGI používané na serveru. Formát je CGI/verze. |
| HTTP_ACCEPT | Čárkami oddělený seznam typů dokumentů podporovaných klientem, například: "image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-comet, */*". Zástupné hvězdičky znamenají, že kromě jmenovaných typů mohou být přijímány i libovolné ostatní typy. |
| HTTP_ACCEPT_LANGUAGE | Identifikátor používaného jazyka, například "en-gb". |
| HTTP_USER_AGENT | Řetězec popisující typ prohlížeče, který zaslal požadavek. |
| HTTP_COOKIE | Všechny cookies zaslané klientem v podobě jednoho řetězce. |
| HTTP_REFERER | Pokud klient načítá stránku na základě klepnutí na odkaz, obsahuje tato proměnná URL adresu stránky, na níž se odkaz nacházel. |
| HTTPS | Vrací hodnotu "ON", pokud přišel požadavek zabezpečeným kanálem (tj. SSL), jinak vrací "OFF" |
| HTTPS_KEYSIZE | Počet bitů klíče připojení Secure Socket Layer, je-li tato metoda použita. |
| HTTPS_SECRETKEYSIZE | Počet bitů privátního klíče serverového certifikátu, používá-li se. |
| HTTPS_SERVER_ISSUER | Celé pole poskytovatel (issuer) serverového certifikátu. |
| HTTPS_SERVER_SUBJECT | Celé pole vlastník serverového certifikátu. |
| INSTANCE_ID | Číselný identifikátor stávající instance IIS definovaný v metabázi v podobě řetězce. |
| INSTANCE_META_PATH | Cesta v metabázi k aktuální instanci IIS. |
| LOCAL_ADDR | IP adresa serveru, na kterou přišel požadavek. S jedním serverem může být spojeno více IP adres. |
| LOGON_USER | Uživatelské jméno, kterým se uživatel přihlásil do operačního systému. |
| PATH_INFO | Virtuální cesta k vykonávanému skriptu, například "/priklady/request_servervariables.asp". |
| PATH_TRANSLATED | Fyzická cesta k vykonávanému skriptu, například C:\Inetpub\wwwroot\Chapter02\show_request.asp. |
| QUERY_STRING | Celý dotazovací řetězec následující v URL adrese požadavku za znakem '?'. |
| REMOTE_ADDR | IP adresa vzdáleného počítače, z něhož byl požadavek odeslán. |
| REMOTE_HOST | Jméno vzdáleného počítače, z něhož byl požadavek odeslán, je-li dostupné. |
| REMOTE_USER | Původní řetězec s uživatelským jménem odeslaným v případě, že je zakázán anonymní přístup (Anonymous), bez jakýchkoli úprav pomocí filtrů umístěných na serveru. |
| REQUEST_METHOD | Metoda použitá k vytvoření požadavku, například "GET", "HEAD", "POST" atd. |
| SCRIPT_NAME | Virtuální cesta k zpracovávanému skriptu. Užitečná například pro stránky, které se odkazují samy na sebe, tj. jsou znovu načteny jako odpověď na odeslaný formulář. |
| SERVER_NAME | Jméno počítače, na němž běží server, jeho DNS alias nebo IP adresa. |
| SERVER_PORT | Číslo portu, na který byl požadavek odeslán. |
| SERVER_PORT_SECURE | Jestliže byl požadavek odeslán zabezpečeným kanálem vrací proměnná hodnotu "1", jinak vrací "0". |
| SERVER_PROTOCOL | Jméno a verze komunikačního protokolu požadavku. Formát je protokol/verze, například "HTTP/1.1" |
| SERVER_SOFTWARE | Jméno a verze serverového softwaru odpovídajícího na požadavek. Formát je jméno/verze. |
| URL | URL adresa právě zpracovávané stránky bez jména serveru nebo DNS jména. |
Ostatní hlavičky (např. vytvořené metodou Response.AddHeader) jsou přístupné přes název odvozený z původního názvu přidáním prefixu HTTP_ a převedením pomlček na podtržítka.
Pokud by klient v požadavku odeslal například hlavičku Uzivatelska-Hlavicka, zjistíme její hodnotu příkazem:
hodnota = Request.ServerVariables("HTTP_Uzivatelska_Hlavicka")
Při pokusu o načtení neexistující hlavičky je vrácen prázdný řetězec.