C++发送HTTP请求---亲测可行(转)
转自:http://hi.baidu.com/benbearlove/item/1671c23017575825b3c0c53f
环境:xp sp3,vs2008,在静态库中使用 MFC
- #include <afxwin.h>
- #include <stdio.h>
- #include <windows.h>
- #include <string>
- #include "Wininet.h"
- #pragma comment(lib,"Wininet.lib")
- //模拟浏览器发送HTTP请求函数
- std::string HttpRequest(char * lpHostName,short sPort,char * lpUrl,char * lpMethod,char * lpPostData,int nPostDataLen)
- {
- HINTERNET hInternet,hConnect,hRequest;
- BOOL bRet;
- std::string strResponse;
- hInternet = (HINSTANCE)InternetOpen("User-Agent",INTERNET_OPEN_TYPE_PRECONFIG,NULL,NULL,0);
- if(!hInternet)
- goto Ret0;
- hConnect = (HINSTANCE)InternetConnect(hInternet,lpHostName,sPort,NULL,"HTTP/1.1",INTERNET_SERVICE_HTTP,0,0);
- if(!hConnect)
- goto Ret0;
- hRequest = (HINSTANCE)HttpOpenRequest(hConnect,lpMethod,lpUrl,"HTTP/1.1",NULL,NULL,INTERNET_FLAG_RELOAD,0);
- if(!hRequest)
- goto Ret0;
- //bRet = HttpAddRequestHeaders(hRequest,"Content-Type: application/x-www-form-urlencoded",Len(FORMHEADERS),HTTP_ADDREQ_FLAG_REPLACE | HTTP_ADDREQ_FLAG_ADD);
- //if(!bRet)
- //goto Ret0;
- bRet = HttpSendRequest(hRequest,NULL,0,lpPostData,nPostDataLen);
- while(TRUE)
- {
- char cReadBuffer[4096];
- unsigned long lNumberOfBytesRead;
- bRet = InternetReadFile(hRequest,cReadBuffer,sizeof(cReadBuffer) - 1,&lNumberOfBytesRead);
- if(!bRet || !lNumberOfBytesRead)
- break;
- cReadBuffer[lNumberOfBytesRead] = 0;
- strResponse = strResponse + cReadBuffer;
- }
- Ret0:
- if(hRequest)
- InternetCloseHandle(hRequest);
- if(hConnect)
- InternetCloseHandle(hConnect);
- if(hInternet)
- InternetCloseHandle(hInternet);
- return strResponse;
- }
- void main()
- {
- //CString strResponse = HttpRequest("translate.google.com",80,"/translate_t?langpair=en|zh-CN","POST","hl=zh-CN&ie=UTF-8&text=this is me&langpair=en|zh-CN",strlen("hl=zh-CN&ie=UTF-8&text=this is me&langpair=en|zh-CN"));
- std::string strResponse = HttpRequest("www.hao123.com",80,NULL,"GET",NULL,0);
- FILE * fp = fopen("C:\\123.htm","wb");
- fwrite(strResponse.c_str(),strResponse.length(),1,fp);
- fclose(fp);
- }
饮水思源,不忘初心。
要面包,也要有诗和远方。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
2009-03-03 [转]vc中socket编程步骤