c语言c 下载文件,如何在C/C++中使用WinHTTP下载文件?

我知道如何下载html / txt页面.例如 :

//Variables

DWORD dwSize = 0;

DWORD dwDownloaded = 0;

LPSTR pszOutBuffer;

vector vFileContent;

BOOL bResults = FALSE;

HINTERNET hSession = NULL,

hConnect = NULL,

hRequest = NULL;

// Use WinHttpOpen to obtain a session handle.

hSession = WinHttpOpen( L"WinHTTP Example/1.0",

WINHTTP_ACCESS_TYPE_DEFAULT_PROXY,

WINHTTP_NO_PROXY_NAME,

WINHTTP_NO_PROXY_BYPASS, 0);

// Specify an HTTP server.

if (hSession)

hConnect = WinHttpConnect( hSession, L"nytimes.com",

INTERNET_DEFAULT_HTTP_PORT, 0);

// Create an HTTP request handle.

if (hConnect)

hRequest = WinHttpOpenRequest( hConnect, L"GET", L"/ref/multimedia/podcasts.html",

NULL, WINHTTP_NO_REFERER,

NULL,

NULL);

// Send a request.

if (hRequest)

bResults = WinHttpSendRequest( hRequest,

WINHTTP_NO_ADDITIONAL_HEADERS,

0, WINHTTP_NO_REQUEST_DATA, 0,

0, 0);

// End the request.

if (bResults)

bResults = WinHttpReceiveResponse( hRequest, NULL);

// Keep checking for data until there is nothing left.

if (bResults)

do

{

// Check for available data.

dwSize = 0;

if (!WinHttpQueryDataAvailable( hRequest, &dwSize))

printf( "Error %u in WinHttpQueryDataAvailable.\n",

GetLastError());

// Allocate space for the buffer.

pszOutBuffer = new char[dwSize+1];

if (!pszOutBuffer)

{

printf("Out of memory\n");

dwSize=0;

}

else

{

// Read the Data.

ZeroMemory(pszOutBuffer, dwSize+1);

if (!WinHttpReadData( hRequest, (LPVOID)pszOutBuffer,

dwSize, &dwDownloaded))

{

printf( "Error %u in WinHttpReadData.\n",

GetLastError());

}

else

{

printf("%s", pszOutBuffer);

// Data in vFileContent

vFileContent.push_back(pszOutBuffer);

}

// Free the memory allocated to the buffer.

delete [] pszOutBuffer;

}

} while (dwSize>0);

// Report any errors.

if (!bResults)

printf("Error %d has occurred.\n",GetLastError());

// Close any open handles.

if (hRequest) WinHttpCloseHandle(hRequest);

if (hConnect) WinHttpCloseHandle(hConnect);

if (hSession) WinHttpCloseHandle(hSession);

// Write vFileContent to file

ofstream out("test.txt",ios::binary);

for (int i = 0; i < (int) vFileContent.size();i++)

out << vFileContent[i];

out.close();

当我尝试下载图片时,我只得到文件的第一行,没有错误信息.问题似乎与WinHttpOpenRequest函数中的此参数(ppwszAcceptTypes)有关.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值