#include <stdio.h>
#include <windows.h>
#include <wininet.h>
#define MAXSIZE 1024
#pragma comment(lib, "Wininet.lib")
void urlopen(TCHAR* url);
int main(int argc, TCHAR* argv[]) {
TCHAR ch[] = TEXT("https://dt.163.com/images/news/0605/news02053101_5.jpg");
urlopen(ch);
getchar();
return 0;
}
void urlopen(TCHAR* url) {
// 1. 打開網絡會話
HINTERNET hSession = InternetOpen(
TEXT("UrlTest"),
INTERNET_OPEN_TYPE_PRECONFIG_WITH_NO_AUTOPROXY,
NULL, NULL, 0
);
if (hSession != NULL) {
// 2. 打開 URL 連接
HINTERNET hHttp = InternetOpenUrl(
hSession, url, NULL, 0,
INTERNET_FLAG_DONT_CACHE, 0
);
BYTE Temp[MAXSIZE];
ULONG Number = 1;
DWORD written;
HANDLE hFile;
if (hHttp != NULL) {
wprintf_s(TEXT("%s\n"), url);
// 3. 創建本地文件
hFile = CreateFile(
TEXT("ysl.jpg"),
GENERIC_WRITE, 0, NULL,
CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0
);
if (hFile == INVALID_HANDLE_VALUE) goto hear;
// 4. 循環讀取並寫入
while (Number > 0) {
InternetReadFile(hHttp, Temp, MAXSIZE - 1, &Number);
Temp[Number] = '\0';
WriteFile(hFile, Temp, Number, &written, NULL);
}
InternetCloseHandle(hHttp);
}
hear:
CloseHandle(hFile);
InternetCloseHandle(hSession);
}
}
| 函數 | 作用 | 關鍵參數 |
|---|---|---|
| InternetOpen | 初始化 WinInet 會話 | 代理設置、用戶代理字符串 |
| InternetOpenUrl | 打開 URL 獲取句柄 | INTERNET_FLAG_DONT_CACHE 禁用緩存 |
| InternetReadFile | 讀取數據到緩衝區 | 返回實際讀取字節數 |
| CreateFile/WriteFile | 本地文件創建與寫入 | GENERIC_WRITE、CREATE_ALWAYS |
| InternetCloseHandle | 釋放網絡句柄 | 必須成對調用防洩漏 |
TCHAR 宏適配 Unicode/ANSI 雙版本GetLastError() 獲取詳細錯誤碼新項目建議考慮: