« | October 2025 | » | 日 | 一 | 二 | 三 | 四 | 五 | 六 | | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | | |
| 公告 |
要勇敢面对一切不幸 |
联系方式 |
MSN:ideation_shang@hotmail.com MAIL:ideation_shang@126.com QQ :113017429 |
Blog信息
|
blog名称:ideation_shang的blog 日志总数:30 评论数量:149 留言数量:0 访问次数:671229 建立时间:2005年4月21日 |

| |
[C++]VC++6.0 通过HTTP方式获取网页 原创空间, 随笔, 软件技术, 电脑与网络
ideation 发表于 2006/5/29 14:43:38 |
最近做了个项目,用VC开发,很有技术难度,习惯了Java开发,VC都忘差不多啦,呵呵~ 为了吃饭,硬着头皮也得做下去啊。项目里面用到了获取网页数据,需要http header 来验证客户端合法性,找了些资料,都有问题。还是自己写吧,用 CInternetSession
//头部包含afxinet.h #include <afxinet.h>
CInternetSession::OpenURL函数原型为:
CStdioFile* OpenURL( LPCTSTR pstrURL, //文件URL地址 DWORD dwContext = 1, //上下文ID DWORD dwFlags = INTERNET_FLAG_TRANSFER_ASCII, //标记 LPCTSTR pstrHeaders = NULL, //发送到服务器的数据头 DWORD dwHeadersLength = 0 );//发送到服务器的数据头长度
dwFlags可以为:INTERNET_FLAG_RELOAD 强制重读数据 INTERNET_FLAG_DONT_CACHE 不保存到缓存 INTERNET_FLAG_TRANSFER_ASCII 使用文本数据 INTERNET_FLAG_TRANSFER_BINARY 使用二进制数据
//获取网页的方法代码如下CString getURLContext(LPCTSTR pstrURL){ //自定义http头信息 char* headers="Accept:*/*\r\n" "Accept-Language:zh-cn\r\n" "User-Agent:VCTestClient\r\n";
CString m_strHTML; try { CInternetSession sess;//建立会话 CHttpFile* pF=(CHttpFile*)sess.OpenURL(pstrURL,1,INTERNET_FLAG_TRANSFER_ASCII||INTERNET_FLAG_RELOAD,headers,strlen(headers));//打开文件 注意:OpenURL 方法的dwFlags参数 必须选择传输模式为INTERNET_FLAG_TRANSFER_ASCII 或者 INTERNET_FLAG_TRANSFER_BINARY CString szData,szAllData; while(pF->ReadString(szData)) { //读取文件 szAllData+="\r\n"; szAllData+=szData; } pF->Close(); sess.Close(); m_strHTML=szAllData; } catch(CException *e) { AfxMessageBox("获取数据失败"); } return m_strHTML;}
希望能对需要的朋友有帮助。 |
|
回复:VC++6.0 通过HTTP方式获取网页 原创空间, 随笔, 软件技术, 电脑与网络
hello(游客)发表评论于2008/10/24 18:10:15 |
获取的时候,页面编码是utf-8,然后得到的是乱码,怎么办呢
以下为blog主人的回复:
找utf-8转gbk的方法 |
|
回复:VC++6.0 通过HTTP方式获取网页 原创空间, 随笔, 软件技术, 电脑与网络
Fiona(游客)发表评论于2007/6/21 16:41:40 |
为什么我用同样的方法调用OpenURL,但返回的文件指针句柄无效,一读就出错呢? |
|
回复:VC++6.0 通过HTTP方式获取网页 原创空间, 随笔, 软件技术, 电脑与网络
LIU(游客)发表评论于2007/3/9 16:29:32 |
你好,看了你的文章很受启发,能不能指导一下怎样获取需要密码才能访问的网页?谢谢 |
|
回复:VC++6.0 通过HTTP方式获取网页 原创空间, 随笔, 软件技术, 电脑与网络
guest(游客)发表评论于2006/6/26 14:46:18 |
[C++]VC++6.0 通过HTTP方式获取网页原创空间, 随笔, 软件技术, 电脑与网络
ideation 发表于 2006-5-29 14:43:38
最近做了个项目,用VC开发,很有技术难度,习惯了Java开发,VC都忘差不多啦,呵呵~ 为了吃饭,硬着头皮也得做下去啊。项目里面用到了获取网页数据,需要http header 来验证客户端合法性,找了些资料,都有问题。还是自己写吧,用 CInternetSession
//头部包含afxinet.h #include <afxinet.h>
CInternetSession::OpenURL函数原型为:
CStdioFile* OpenURL( LPCTSTR pstrURL, //文件URL地址 DWORD dwContext = 1, //上下文ID DWORD dwFlags = INTERNET_FLAG_TRANSFER_ASCII, //标记 LPCTSTR pstrHeaders = NULL, //发送到服务器的数据头 DWORD dwHeadersLength = 0 );//发送到服务器的数据头长度
dwFlags可以为:INTERNET_FLAG_RELOAD 强制重读数据 INTERNET_FLAG_DONT_CACHE 不保存到缓存 INTERNET_FLAG_TRANSFER_ASCII 使用文本数据 INTERNET_FLAG_TRANSFER_BINARY 使用二进制数据
//获取网页的方法代码如下CString getURLContext(LPCTSTR pstrURL){ //自定义http头信息 char* headers="Accept:*/*\r\n" "Accept-Language:zh-cn\r\n" "User-Agent:VCTestClient\r\n";
CString m_strHTML; try { CInternetSession sess;//建立会话 CHttpFile* pF=(CHttpFile*)sess.OpenURL(pstrURL,1,INTERNET_FLAG_TRANSFER_ASCII||INTERNET_FLAG_RELOAD,headers,strlen(headers));//打开文件 注意:OpenURL 方法的dwFlags参数 必须选择传输模式为INTERNET_FLAG_TRANSFER_ASCII 或者 INTERNET_FLAG_TRANSFER_BINARY CString szData,szAllData; while(pF->ReadString(szData)) { //读取文件 szAllData+="\r\n"; szAllData+=szData; } pF->Close(); sess.Close(); m_strHTML=szAllData; } catch(CException *e) { AfxMessageBox("获取数据失败"); } return m_strHTML;}
希望能对需要的朋友有帮助。 |
|
» 1 »
|