Změna stylu: Standardní Dřevo Jaro Léto Léto2 Potápěč :-) Údolí stínů

Objekt Request

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ářů.

Metody

Tento objekt poskytuje pouze jednu metodu.

Metoda BinaryRead

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.

Atributy

Atribut TotalBytes

Obsahuje informaci o počtu bytů v těle HTTP požadavku.

Příklad:

pocet_bytu = Request.TotalBytes
data = Request.BinaryRead(pocet_bytu)

Kolekce

Objekt Request obsahuje několik kolekcí.

Kolekce ClientCertificate

V případě zabezpečeného přístupu (např. technologií SSL) obsahuje tato kolekce informace o digitálním certifikátu klienta.

Pole kolekce ClientCertificate

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

Kolekce Cookies

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 :-)"

Prvky kolekce Cookies

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

Kolekce Form

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>"
...

Práce s vícehodnotovými prvky formuláře

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 %>

Kolekce QueryString

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 ServerVariables

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.


Hlavní stránka