Sdílet prostřednictvím


CHttpFile – třída

Poskytuje funkce pro vyžádání a čtení souborů na serveru HTTP.

Syntaxe

class CHttpFile : public CInternetFile

Členové

Chráněné konstruktory

Název Popis
CHttpFile::CHttpFile CHttpFile Vytvoří objekt.

Veřejné metody

Název Popis
CHttpFile::AddRequestHeaders Přidá hlavičky do požadavku odeslaného na server HTTP.
CHttpFile::EndRequest Ukončí požadavek odeslaný na server HTTP pomocí členské funkce SendRequestEx .
CHttpFile::GetFileURL Získá adresu URL pro zadaný soubor.
CHttpFile::GetObject Získá cílový objekt příkazu v požadavku na server HTTP.
CHttpFile::GetVerb Získá příkaz, který byl použit v požadavku na server HTTP.
CHttpFile::QueryInfo Vrátí hlavičky odpovědi nebo požadavku ze serveru HTTP.
CHttpFile::QueryInfoStatusCode Načte stavový kód přidružený k požadavku HTTP a umístí ho do zadaného dwStatusCode parametru.
CHttpFile::SendRequest Odešle požadavek na server HTTP.
CHttpFile::SendRequestEx Odešle požadavek na server HTTP pomocí metody Write nebo WriteString metody CInternetFile.

Poznámky

Pokud vaše internetová relace čte data ze serveru HTTP, musíte vytvořit instanci CHttpFile.

Další informace o tom, jak CHttpFile funguje s ostatními internetovými třídami MFC, najdete v článku Internetové programování pomocí winInetu.

Hierarchie dědičnosti

Objekt CObject

CFile

CStdioFile

CInternetFile

CHttpFile

Požadavky

Hlavička: afxinet.h

CHttpFile::AddRequestHeaders

Voláním této členské funkce přidáte do popisovače požadavku HTTP jednu nebo více hlaviček požadavku HTTP.

BOOL AddRequestHeaders(
    LPCTSTR pstrHeaders,
    DWORD dwFlags = HTTP_ADDREQ_FLAG_ADD_IF_NEW,
    int dwHeadersLen = -1);

BOOL AddRequestHeaders(
    CString& str,
    DWORD dwFlags = HTTP_ADDREQ_FLAG_ADD_IF_NEW);

Parametry

pstrHeaders
Ukazatel na řetězec obsahující hlavičku nebo záhlaví pro připojení k požadavku. Každá hlavička musí být ukončena dvojicí CR/LF.

dwFlags
Upraví sémantiku nových hlaviček. Může to být jedna z následujících možností:

  • HTTP_ADDREQ_FLAG_COALESCE sloučí hlavičky stejného názvu pomocí příznaku a přidá první záhlaví nalezené do následující hlavičky. Například "Accept: text/*" a "Accept: audio/*" (Přijmout: audio/*) způsobí vytvoření jediné hlavičky Accept: text/*, audio/*. Je na volající aplikaci, aby se zajistilo soudržné schéma s ohledem na data přijatá požadavky odesílanými pomocí sloučených nebo samostatných hlaviček.

  • HTTP_ADDREQ_FLAG_REPLACE Provede odebrání a přidání k nahrazení aktuální hlavičky. Název záhlaví se použije k odebrání aktuální hlavičky a k přidání nové hlavičky se použije úplná hodnota. Pokud je hodnota záhlaví prázdná a záhlaví se najde, odebere se. Pokud není prázdný, nahradí se hodnota záhlaví.

  • HTTP_ADDREQ_FLAG_ADD_IF_NEW přidá záhlaví pouze v případě, že ještě neexistuje. Pokud existuje, vrátí se chyba.

  • HTTP_ADDREQ_FLAG_ADD Používá se s příkazem NAHRADIT. Přidá záhlaví, pokud neexistuje.

dwHeadersLen
Délka znaků pstrHeaders. Pokud se jedná o hodnotu -1L, předpokládá se, že hodnota pstrHeaders bude ukončena nulou a vypočítá se délka.

Str
Odkaz na objekt CString obsahující hlavičku požadavku nebo hlavičky, které se mají přidat.

Návratová hodnota

Nenulové, pokud je úspěšné; jinak 0. Pokud volání selže, může být volána funkce Win32 GetLastError k určení příčiny chyby.

Poznámky

AddRequestHeaders připojí další hlavičky volného formátu k popisovači požadavku HTTP. Je určen pro použití sofistikovanými klienty, kteří potřebují podrobnou kontrolu nad přesným požadavkem odeslaný na server HTTP.

Poznámka:

Aplikace může předat více hlaviček v pstrHeaders nebo str pro AddRequestHeaders volání pomocí HTTP_ADDREQ_FLAG_ADD nebo HTTP_ADDREQ_FLAG_ADD_IF_NEW. Pokud se aplikace pokusí odebrat nebo nahradit hlavičku pomocí HTTP_ADDREQ_FLAG_REMOVE nebo HTTP_ADDREQ_FLAG_REPLACE, lze v lpszHeaders zadat pouze jednu hlavičku.

CHttpFile::CHttpFile

Tato členová funkce je volána k vytvoření objektu CHttpFile .

CHttpFile(
    HINTERNET hFile,
    HINTERNET hSession,
    LPCTSTR pstrObject,
    LPCTSTR pstrServer,
    LPCTSTR pstrVerb,
    DWORD_PTR dwContext);

CHttpFile(
    HINTERNET hFile,
    LPCTSTR pstrVerb,
    LPCTSTR pstrObject,
    CHttpConnection* pConnection);

Parametry

hFile
Popisovač internetového souboru.

hSession
Popisovač internetové relace.

pstrObject
Ukazatel na řetězec obsahující CHttpFile objekt.

pstrServer
Ukazatel na řetězec obsahující název serveru.

pstrVerb
Ukazatel na řetězec obsahující metodu, která se má použít při odesílání požadavku. Může to být POST, HEAD nebo GET.

dwContext
Identifikátor kontextu objektu CHttpFile . Další informace o tomto parametru najdete v části Poznámky .

pConnection
Ukazatel na objekt CHttpConnection .

Poznámky

Nikdy nekonstruujete CHttpFile objekt přímo. Místo toho místo toho volejte CInternetSession::OpenURL nebo CHttpConnection::OpenRequest .

Výchozí hodnota dwContext knihovny MFC je odeslána objektu CHttpFile z CInternetSession objektu, který objekt vytvořil CHttpFile . Při volání CInternetSession::OpenURL nebo CHttpConnection vytvoření objektu CHttpFile můžete přepsat výchozí nastavení identifikátoru kontextu na hodnotu, kterou zvolíte. Identifikátor kontextu je vrácen do CInternetSession::OnStatusCallback poskytnout stav objektu, se kterým je identifikován. Další informace o identifikátoru kontextu najdete v článku Internet First Steps: WinInet .

CHttpFile::EndRequest

Voláním této členské funkce ukončíte požadavek odeslaný na server HTTP pomocí členské funkce SendRequestEx .

BOOL EndRequest(
    DWORD dwFlags = 0,
    LPINTERNET_BUFFERS lpBuffIn = NULL,
    DWORD_PTR dwContext = 1);

Parametry

dwFlags
Příznaky popisující operaci Seznam příslušných příznaků najdete v tématu HttpEndRequest v sadě Windows SDK.

lpBuffIn
Ukazatel na inicializovaný INTERNET_BUFFERS , který popisuje vstupní vyrovnávací paměť použitou pro operaci.

dwContext
Identifikátor kontextu operace CHttpFile . Další informace o tomto parametru najdete v části Poznámky.

Návratová hodnota

Nenulové, pokud je úspěšné; jinak 0. Pokud volání selže, určete příčinu selhání prozkoumáním vyvolaného CInternetException objektu.

Poznámky

Výchozí hodnota dwContext je odeslána mfc CHttpFile objektu z CInternetSession objektu, který vytvořil CHttpFile objekt. Když zavoláte CInternetSession::OpenURL nebo CHttpConnection k vytvoření objektu CHttpFile , můžete přepsat výchozí nastavení pro nastavení identifikátoru kontextu na hodnotu podle vašeho výběru. Identifikátor kontextu je vrácen do CInternetSession::OnStatusCallback poskytnout stav objektu, se kterým je identifikován. Další informace o identifikátoru kontextu najdete v článku Internet First Steps: WinInet .

CHttpFile::GetFileURL

Voláním této členské funkce získáte název souboru HTTP jako adresu URL.

virtual CString GetFileURL() const;

Návratová hodnota

CString objekt obsahující adresu URL odkazující na prostředek přidružený k tomuto souboru.

Poznámky

Tuto členovou funkci použijte pouze po úspěšném volání SendRequest nebo objektu úspěšně vytvořeném metodou CHttpFile OpenURL.

CHttpFile::GetObject

Voláním této členské funkce získáte název objektu přidruženého k tomuto CHttpFile.

CString GetObject() const;

Návratová hodnota

A CString objekt obsahující název objektu.

Poznámky

Tuto členovou funkci použijte pouze po úspěšném volání SendRequest nebo objektu úspěšně vytvořeném metodou CHttpFile OpenURL.

CHttpFile::GetVerb

Voláním této členské funkce získáte operaci HTTP (nebo metodu) přidruženou k tomuto CHttpFile.

CString GetVerb() const;

Návratová hodnota

A CString objekt obsahující název příkazu HTTP (nebo metody).

Poznámky

Tuto členovou funkci použijte pouze po úspěšném volání SendRequest nebo objektu úspěšně vytvořeném metodou CHttpFile OpenURL.

CHttpFile::QueryInfo

Voláním této členské funkce vrátíte hlavičky odpovědi nebo požadavku z požadavku HTTP.

BOOL QueryInfo(
    DWORD dwInfoLevel,
    LPVOID lpvBuffer,
    LPDWORD lpdwBufferLength,
    LPDWORD lpdwIndex = NULL) const;

BOOL QueryInfo(
    DWORD dwInfoLevel,
    CString& str,
    LPDWORD dwIndex = NULL) const;

BOOL QueryInfo(
    DWORD dwInfoLevel,
    SYSTEMTIME* pSysTime,
    LPDWORD dwIndex = NULL) const;

Parametry

dwInfoLevel
Kombinace atributu pro dotaz a následující příznaky, které určují typ požadovaných informací:

  • HTTP_QUERY_CUSTOM Vyhledá název záhlaví a vrátí tuto hodnotu v lpvBuffer ve výstupu. HTTP_QUERY_CUSTOM vyvolá kontrolní výraz, pokud se hlavička nenajde.

  • HTTP_QUERY_FLAG_REQUEST_HEADERS Obvykle aplikace dotazuje hlavičky odpovědi, ale aplikace může také dotazovat hlavičky požadavků pomocí tohoto příznaku.

  • HTTP_QUERY_FLAG_SYSTEMTIME Pro tyto hlavičky, jejichž hodnota je řetězec data a času, například "Last-Modified-Time", tento příznak vrátí hodnotu hlavičky jako standardní strukturu Win32 SYSTEMTIME , která nevyžaduje aplikaci k analýze dat. Pokud použijete tento příznak, můžete použít SYSTEMTIME přepsání funkce.

  • HTTP_QUERY_FLAG_NUMBER Pro záhlaví, jejichž hodnota je číslo, například stavový kód, vrátí tento příznak data jako 32bitové číslo.

Seznam možných hodnot najdete v části Poznámky .

lpvBuffer
Ukazatel na vyrovnávací paměť, která přijímá informace.

lpdwBufferLength
Při zadávání odkazuje na hodnotu obsahující délku vyrovnávací paměti dat v počtu znaků nebo bajtů. Podrobnější informace o tomto parametru najdete v části Poznámky .

lpdwIndex
Ukazatel na index záhlaví založený na nule Může mít hodnotu NULL. Tento příznak použijte k vytvoření výčtu více záhlaví se stejným názvem. Při vstupu lpdwIndex označuje index zadané hlavičky, která se má vrátit. Ve výstupu lpdwIndex označuje index další hlavičky. Pokud další index nelze najít, vrátí se ERROR_HTTP_HEADER_NOT_FOUND.

Str
Odkaz na objekt CString , který přijímá vrácené informace.

dwIndex
Hodnota indexu. Viz lpdwIndex.

pSysTime
Ukazatel na strukturu Win32 SYSTEMTIME .

Návratová hodnota

Nenulové, pokud je úspěšné; jinak 0. Pokud volání selže, může být volána funkce Win32 GetLastError k určení příčiny chyby.

Poznámky

Tuto členovou funkci použijte pouze po úspěšném volání SendRequest nebo objektu úspěšně vytvořeném metodou CHttpFile OpenURL.

Z těchto typů dat můžete načíst následující typy dat QueryInfo:

  • řetězce (výchozí)

  • SYSTEMTIME (hlavičky "Data:" Expirs:" atd.)

  • DWORD (pro STATUS_CODE, CONTENT_LENGTH atd.)

Když se řetězec zapíše do vyrovnávací paměti a členová funkce bude úspěšná, lpdwBufferLength obsahuje délku řetězce v znacích minus 1 pro ukončující znak NULL.

Mezi možné hodnoty dwInfoLevel patří:

  • HTTP_QUERY_MIME_VERSION

  • HTTP_QUERY_CONTENT_TYPE

  • HTTP_QUERY_CONTENT_TRANSFER_ENCODING

  • HTTP_QUERY_CONTENT_ID

  • HTTP_QUERY_CONTENT_DESCRIPTION

  • HTTP_QUERY_CONTENT_LENGTH

  • HTTP_QUERY_ALLOWED_METHODS

  • HTTP_QUERY_PUBLIC_METHODS

  • HTTP_QUERY_DATE

  • HTTP_QUERY_EXPIRES

  • HTTP_QUERY_LAST_MODIFIED

  • HTTP_QUERY_MESSAGE_ID

  • HTTP_QUERY_URI

  • HTTP_QUERY_DERIVED_FROM

  • HTTP_QUERY_LANGUAGE

  • HTTP_QUERY_COST

  • HTTP_QUERY_WWW_LINK

  • HTTP_QUERY_PRAGMA

  • HTTP_QUERY_VERSION

  • HTTP_QUERY_STATUS_CODE

  • HTTP_QUERY_STATUS_TEXT

  • HTTP_QUERY_RAW_HEADERS

  • HTTP_QUERY_RAW_HEADERS_CRLF

CHttpFile::QueryInfoStatusCode

Voláním této členské funkce získáte stavový kód přidružený k požadavku HTTP a umístíte ho do zadaného parametru dwStatusCode .

BOOL QueryInfoStatusCode(DWORD& dwStatusCode) const;

Parametry

dwStatusCode
Odkaz na stavový kód. Stavové kódy označují úspěch nebo selhání požadované události. Viz Poznámky pro výběr popisů stavového kódu.

Návratová hodnota

Nenulové, pokud je úspěšné; jinak 0. Pokud volání selže, může být volána funkce Win32 GetLastError k určení příčiny chyby.

Poznámky

Tuto členovou funkci použijte pouze po úspěšném volání SendRequest nebo objektu úspěšně vytvořeném metodou CHttpFile OpenURL.

Stavové kódy HTTP spadají do skupin označujících úspěch nebo selhání požadavku. Následující tabulky popisují skupiny stavových kódů a nejběžnější stavové kódy HTTP.

Seskupit Význam
200-299 Success
300-399 Informační
400-499 Chyba požadavku
500-599 Chyba serveru

Běžné stavové kódy HTTP:

Stavový kód Význam
200 Adresa URL umístěná, přenos následuje
400 Nesrozumitelný požadavek
404 Požadovaná adresa URL nebyla nalezena.
405 Server nepodporuje požadovanou metodu.
500 Neznámá chyba serveru
503 Došlo k dosažení kapacity serveru

CHttpFile::SendRequest

Voláním této členské funkce odešlete požadavek na server HTTP.

BOOL SendRequest(
    LPCTSTR pstrHeaders = NULL,
    DWORD dwHeadersLen = 0,
    LPVOID lpOptional = NULL,
    DWORD dwOptionalLen = 0);

BOOL SendRequest(
    CString& strHeaders,
    LPVOID lpOptional = NULL,
    DWORD dwOptionalLen = 0);

Parametry

pstrHeaders
Ukazatel na řetězec obsahující název záhlaví, která se mají odeslat.

dwHeadersLen
Délka hlaviček identifikovaných pstrHeaders.

lpOptional
Všechna volitelná data, která se mají odeslat okamžitě za hlavičkami požadavku. Obvykle se používá pro operace POST a PUT. Pokud neexistují žádná volitelná data k odeslání, může to mít hodnotu NULL.

dwOptionalLen
Délka lpOptional.

strHeaders
Řetězec obsahující název hlaviček pro odesílaný požadavek.

Návratová hodnota

Nenulové, pokud je úspěšné; jinak 0. Pokud volání selže, určete příčinu selhání prozkoumáním vyvolaného CInternetException objektu.

CHttpFile::SendRequestEx

Voláním této členské funkce odešlete požadavek na server HTTP.

BOOL SendRequestEx(
    DWORD dwTotalLen,
    DWORD dwFlags = HSR_INITIATE,
    DWORD_PTR dwContext = 1);

BOOL SendRequestEx(
    LPINTERNET_BUFFERS lpBuffIn,
    LPINTERNET_BUFFERS lpBuffOut,
    DWORD dwFlags = HSR_INITIATE,
    DWORD_PTR dwContext = 1);

Parametry

dwTotalLen
Počet bajtů, které se mají odeslat v požadavku

dwFlags
Příznaky popisující operaci Seznam vhodných příznaků najdete v tématu HttpSendRequestEx v sadě Windows SDK.

dwContext
Identifikátor kontextu operace CHttpFile . Další informace o tomto parametru najdete v části Poznámky.

lpBuffIn
Ukazatel na inicializovaný INTERNET_BUFFERS , který popisuje vstupní vyrovnávací paměť použitou pro operaci.

lpBuffOut
Ukazatel na inicializovaný INTERNET_BUFFERS, který popisuje výstupní vyrovnávací paměť použitou pro operaci.

Návratová hodnota

Nenulové, pokud je úspěšné. Pokud volání selže, určete příčinu selhání prozkoumáním vyvolaného CInternetException objektu.

Poznámky

Tato funkce umožňuje aplikaci odesílat data pomocí write a WriteString metody CInternetFile. Před voláním přepsání této funkce musíte znát délku dat, která se mají odeslat. První přepsání umožňuje zadat délku dat, která chcete odeslat. Druhé přepsání přijímá ukazatele na INTERNET_BUFFERS struktury, které lze použít k popisu vyrovnávací paměti podrobně.

Po zápisu obsahu do souboru ukončete operaci voláním EndRequest .

Výchozí hodnota dwContext je odeslána mfc CHttpFile objektu z CInternetSession objektu, který vytvořil CHttpFile objekt. Když zavoláte CInternetSession::OpenURL nebo CHttpConnection k vytvoření objektu CHttpFile , můžete přepsat výchozí nastavení pro nastavení identifikátoru kontextu na hodnotu podle vašeho výběru. Identifikátor kontextu je vrácen do CInternetSession::OnStatusCallback poskytnout stav objektu, se kterým je identifikován. Další informace o identifikátoru kontextu najdete v článku Internet First Steps: WinInet .

Příklad

Tento fragment kódu odešle obsah řetězce do knihovny DLL s názvem MFCISAPI.DLL na serveru LOCALHOST. I když tento příklad používá pouze jedno volání WriteString, použití více volání k odesílání dat v blocích je přijatelné.

CString strData = _T("Some very long data to be POSTed here!");
pServer = session.GetHttpConnection(_T("localhost"));
pFile = pServer->OpenRequest(CHttpConnection::HTTP_VERB_POST,
                             _T("/MFCISAPI/MFCISAPI.dll?"));
pFile->SendRequestEx(strData.GetLength());

pFile->WriteString(strData);
pFile->EndRequest();

Viz také

CInternetFile – třída
Graf hierarchie
CInternetFile – třída
CGopherFile – třída
CHttpConnection – třída