C++如何实现打开url连接,并返回一个流对象?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++如何实现打开url连接,并返回一个流对象?相关的知识,希望对你有一定的参考价值。

因为是做NDK开发,所以不能用依赖windows平台的东东,找了半天也没找到相关的方法,就是第三方类库也行啊……

void CBaiduUseMfcMBDlg::OnBnClickedButton1()

//判断是否可连接INTER网
if(InternetAttemptConnect(0) != ERROR_SUCCESS)

AfxMessageBox("无法连接INTERNET!");
return;


//创建internet连接
HINTERNET hInet = InternetOpen(
_T("downloader"),
INTERNET_OPEN_TYPE_DIRECT,
NULL,
NULL,
NULL);
if(hInet == NULL)

AfxMessageBox("InternetOpen()失败!");
return;


//创建http请求头
TCHAR header[1024];
memset(header,0x0,sizeof(header));
int filelen = 8192;
_stprintf(header, _T("Range:bytes=%d-"), filelen);

//打开URL地址页面
HINTERNET hIurl = InternetOpenUrl(
hInet,
_T(""),
header,
-1,
0,
0);
if(hIurl == NULL)

LPVOID lpMsgBuf;
FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
GetLastError(),
0, // Default language
(LPTSTR) &lpMsgBuf,
0,
NULL
);
// Process any inserts in lpMsgBuf.
// ...
// Display the string.
::MessageBox( NULL, (LPCTSTR)lpMsgBuf, NULL, MB_OK | MB_ICONINFORMATION );
// Free the buffer.
LocalFree( lpMsgBuf );
InternetCloseHandle(hInet);

return;


//读取打开的页面内容
TCHAR buf[8192];
memset(buf,0x0,sizeof(buf));
DWORD dwR = 0;
if ( ! InternetReadFile(hIurl,buf,8192,&dwR) )

InternetCloseHandle(hInet);
InternetCloseHandle(hIurl);
AfxMessageBox("InternetReadFile()失败!");
return;


//输出
AfxMessageBox(buf);
//关闭打开的句柄
InternetCloseHandle(hInet);
InternetCloseHandle(hIurl);

参考技术A 打开url也就是要联网?联网需要socket,这种底层的东西,一般都是平台实现的吧

以上是关于C++如何实现打开url连接,并返回一个流对象?的主要内容,如果未能解决你的问题,请参考以下文章

Vue中 实现文件流格式图片预览

C++——流类库与输入/输出

C++面向对象:C++ 数据抽象

函数5

从本地文件或 url 打开一个 IO 流

C++学习笔记55:流类库与输入输出