Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Die ResponseStream-Eigenschaft ruft den Antwortentitätstext als IStream ab.
Diese Eigenschaft ist schreibgeschützt.
Syntax
HRESULT get_ResponseStream(
[out, retval] VARIANT *Body
);
vtResponseStream = WinHttpRequest.ResponseStream
Eigenschaftswert
Ein Variant-Objekt , das einen Zeiger auf eine IUnknown-Schnittstelle empfängt, die nach einer IStream-Schnittstelle abgefragt werden kann. Dieser Stream gibt die Rohdaten zurück, die direkt vom Server empfangen wurden.
Fehlercodes
Der Rückgabewert wird bei Erfolg S_OK oder andernfalls ein Fehlerwert.
Es wird E_PENDING , wenn der vorherige Sendevorgang nicht abgeschlossen ist.
Bemerkungen
Rufen Sie QueryInterface für den zurückgegebenen Zeiger auf, um einen Zeiger auf eine IStream-Schnittstelle abzurufen. Diese Eigenschaft gibt die Antwortdaten als IStream zurück. Diese Eigenschaft kann erst aufgerufen werden, nachdem die Send-Methode aufgerufen wurde.
Hinweis
Informationen zu Windows XP und Windows 2000 finden Sie im Abschnitt Laufzeitanforderungen der WinHTTP-Startseite .
Beispiele
Das folgende Beispiel zeigt, wie Sie eine HTTP-Verbindung öffnen, eine HTTP-Anforderung senden und die Antwort als IStream lesen. Die Daten aus dem IStream werden in die Datei Temp1.gif geschrieben.
#include <windows.h>
#include <stdio.h>
#include <objbase.h>
#include "httprequest.h"
#pragma comment(lib, "ole32.lib")
#pragma comment(lib, "oleaut32.lib")
// IID for IWinHttpRequest.
const IID IID_IWinHttpRequest =
{
0x06f29373,
0x5c5a,
0x4b54,
{0xb0, 0x25, 0x6e, 0xf1, 0xbf, 0x8a, 0xbf, 0x0e}
};
#define Trace(_s) fprintf(stderr, _s)
#define TraceErr(_s, _hr) fprintf(stderr, _s, _hr)
#define Check(_hr,_s) if (FAILED(_hr)) { fprintf(stderr, _s ## " 0x%08lx\n", _hr); return -1; }
int main(int argc, char* argv[])
{
UNREFERENCED_PARAMETER(argc);
UNREFERENCED_PARAMETER(argv);
// Variable for return value.
HRESULT hr;
// Initialize COM.
hr = CoInitialize( NULL );
IWinHttpRequest * pIWinHttpRequest = NULL;
BSTR bstrResponse = NULL;
VARIANT varFalse;
VARIANT varEmpty;
VARIANT varResponse;
VariantInit(&varResponse);
CLSID clsid;
VariantInit(&varFalse);
V_VT(&varFalse) = VT_BOOL;
V_BOOL(&varFalse) = VARIANT_FALSE;
VariantInit(&varEmpty);
V_VT(&varEmpty) = VT_ERROR;
hr = CLSIDFromProgID(L"WinHttp.WinHttpRequest.5.1", &clsid);
if (SUCCEEDED(hr))
{
hr = CoCreateInstance(clsid, NULL,
CLSCTX_INPROC_SERVER,
IID_IWinHttpRequest,
(void **)&pIWinHttpRequest);
}
// ==== Get binary (.gif) file and write it to disk. =========
if (SUCCEEDED(hr))
{ // Open WinHttpRequest for synchronous access.
BSTR bstrMethod = SysAllocString(L"GET");
BSTR bstrUrl = SysAllocString(
L"https://www.microsoft.com/library/homepage/images/ms-banner.gif");
hr = pIWinHttpRequest->Open(bstrMethod, bstrUrl, varFalse);
SysFreeString(bstrMethod);
SysFreeString(bstrUrl);
}
if (SUCCEEDED(hr))
{ // Send Request.
hr = pIWinHttpRequest->Send(varEmpty);
}
if (SUCCEEDED(hr))
{ // Get response body.
hr = pIWinHttpRequest->get_ResponseBody(&varResponse);
}
if (SUCCEEDED(hr))
{ // Print response to file temp1.gif.
long UpperBounds;
long LowerBounds;
unsigned char* buff;
// Verify that varResponse contains array of unsigned bytes.
if (varResponse.vt == (VT_ARRAY | VT_UI1)) {
long Dims = SafeArrayGetDim(varResponse.parray);
// The array should only have 1 dimension.
if (Dims == 1) {
// Get upper and lower array bounds.
SafeArrayGetLBound(varResponse.parray, 1,
&LowerBounds);
SafeArrayGetUBound(varResponse.parray, 1,
&UpperBounds);
UpperBounds++;
// Lock SAFEARRAY for access.
SafeArrayAccessData (varResponse.parray,
(void**)&buff);
// Output array to file temp.gif.
HANDLE hFile;
DWORD dwBytesWritten;
// Create file.
hFile = CreateFile(TEXT("Temp1.gif"),
GENERIC_WRITE, // Open for writing.
0, // Do not share.
NULL, // No security.
CREATE_ALWAYS, // Overwrite existing.
FILE_ATTRIBUTE_NORMAL, // Normal file.
NULL); // No attribute template.
if (hFile == INVALID_HANDLE_VALUE)
{
wprintf(L"Could not open file."); // Process error.
}
else
{
WriteFile(hFile, buff, UpperBounds - LowerBounds,
&dwBytesWritten, NULL);
}
CloseHandle(hFile);
SafeArrayUnaccessData (varResponse.parray);
}
}
}
// ======== Get binary (.gif) file and write
// it to disk using IStream. ================
if (SUCCEEDED(hr))
{ // Open WinHttpRequest for synchronous access.
BSTR bstrMethod = SysAllocString(L"GET");
BSTR bstrUrl = SysAllocString(
L"https://www.microsoft.com/library/homepage/images/ms-banner.gif");
hr = pIWinHttpRequest->Open(bstrMethod, bstrUrl, varFalse);
SysFreeString(bstrMethod);
SysFreeString(bstrUrl);
}
if (SUCCEEDED(hr))
{ // Send Request.
hr = pIWinHttpRequest->Send(varEmpty);
}
if (SUCCEEDED(hr))
{ // Get Response as an IStream.
hr = pIWinHttpRequest->get_ResponseStream(&varResponse);
}
if (SUCCEEDED(hr))
{ // Print response to file temp1.gif.
IStream* pStream = NULL;
BYTE bBuffer[8192];
DWORD cb, cbRead, cbWritten;
// Check that an IStream was received.
if (VT_UNKNOWN == V_VT(&varResponse) ||
VT_STREAM == V_VT(&varResponse))
{
// Get IStream interface pStream.
hr = V_UNKNOWN(&varResponse)->QueryInterface(IID_IStream,
reinterpret_cast<void**>(&pStream));
Check(hr, "QI for IStream");
}
else
{
wprintf(L"Unexpected vartype for Response\n");
return -1;
}
HANDLE hFile;
// Open file Temp2.gif for output.
hFile = CreateFile(TEXT("Temp2.gif"),
GENERIC_WRITE, // Open for writing.
0, // Do not share.
NULL, // No security.
CREATE_ALWAYS, // Overwrite existing.
FILE_ATTRIBUTE_NORMAL, // Normal file.
NULL); // No attribute template.
if (hFile == INVALID_HANDLE_VALUE)
{
wprintf(L"Could not open file."); // Process error.
}
else
{
// Copy data from the response stream to file.
cb = sizeof(bBuffer);
hr = pStream->Read(bBuffer, cb, &cbRead);
while (SUCCEEDED(hr) && 0 != cbRead)
{
if (!WriteFile(hFile, bBuffer,
cbRead, &cbWritten, NULL))
{
TraceErr("WriteFile fails with 0x%08lx\n",
HRESULT_FROM_WIN32(GetLastError()));
return -1;
}
hr = pStream->Read(bBuffer, cb, &cbRead);
}
}
CloseHandle(hFile);
pStream->Release();
VariantClear(&varResponse);
}
// Release memory.
if (pIWinHttpRequest)
pIWinHttpRequest->Release();
if (bstrResponse)
SysFreeString(bstrResponse);
CoUninitialize();
return 0;
}
Anforderungen
| Anforderung | Wert |
|---|---|
| Unterstützte Mindestversion (Client) |
Windows XP, Windows 2000 Professional mit SP3 [nur Desktop-Apps] |
| Unterstützte Mindestversion (Server) |
Windows Server 2003, Windows 2000 Server mit SP3 [nur Desktop-Apps] |
| Verteilbare Komponente |
WinHTTP 5.0 und Internet Explorer 5.01 oder höher unter Windows XP und Windows 2000. |
| IDL |
|
| Bibliothek |
|
| DLL |
|