VC http请求
场景:
如何用VC发送http请求?
哦是新手,请说详细点,例如我想向查询IP网站www.ip866.com发送一个IP,然后获得它返回的信息写入文本中,用VC如何实现,谢谢了!
------解决方案--------------------
//设置代理
//参数分别为:代理服务器地址,端口号,用户名,密码
//用到的变量说明:
//sess为CInternetSession变量
//pConnect为CHttpConnection变量
//pFile 为CHttpFile变量
int TMTNHTTPProtocol::SetProxy(char* proxyAddr, char* proxyPort, char* proxyUser, char* proxyPassword)
{
char tmp[1024];
INTERNET_PROXY_INFO proxyinfo;
try
{
memset(tmp, 0, 1024);
proxyinfo.dwAccessType = INTERNET_OPEN_TYPE_PROXY;
strcat(tmp , proxyAddr);
strcat(tmp , ":");
strcat(tmp , proxyPort);
proxyinfo.lpszProxy = tmp;
proxyinfo.lpszProxyBypass = NULL;
if (! sess.SetOption(INTERNET_OPTION_PROXY, (LPVOID)&proxyinfo, sizeof(INTERNET_PROXY_INFO)))
{
return 0;
}
pConnect = sess.GetHttpConnection("www.baidu.com", INTERNET_FLAG_NO_AUTO_REDIRECT, 80);
pFile = pConnect->OpenRequest(CHttpConnection::HTTP_VERB_POST, pUrl);
if (!pFile->SetOption(INTERNET_OPTION_PROXY_USERNAME, proxyUser, strlen(proxyUser) + 1))
{
return 0;
}
if (!pFile->SetOption(INTERNET_OPTION_PROXY_PASSWORD, proxyPassword, strlen(proxyPassword) + 1))
{
return 0;
}
return 1;
}
catch(...)
{
return 0;
}
}
------解决方案--------------------
先正常连接到服务器对应的端口,保证物理连接的正常;然后自己构造要发送的内容,头部都是 ANSI 字符串,如 "GET ...",然后将所构造的块 send / WSASend 出去就可以了,正常情况下,服务器马上就会发回一个回应,也是字符串形式的,告诉你是否接受你的请求。
先理解 HTTP 协议内容吧。
如何用VC发送http请求?
哦是新手,请说详细点,例如我想向查询IP网站www.ip866.com发送一个IP,然后获得它返回的信息写入文本中,用VC如何实现,谢谢了!
------解决方案--------------------
//设置代理
//参数分别为:代理服务器地址,端口号,用户名,密码
//用到的变量说明:
//sess为CInternetSession变量
//pConnect为CHttpConnection变量
//pFile 为CHttpFile变量
int TMTNHTTPProtocol::SetProxy(char* proxyAddr, char* proxyPort, char* proxyUser, char* proxyPassword)
{
char tmp[1024];
INTERNET_PROXY_INFO proxyinfo;
try
{
memset(tmp, 0, 1024);
proxyinfo.dwAccessType = INTERNET_OPEN_TYPE_PROXY;
strcat(tmp , proxyAddr);
strcat(tmp , ":");
strcat(tmp , proxyPort);
proxyinfo.lpszProxy = tmp;
proxyinfo.lpszProxyBypass = NULL;
if (! sess.SetOption(INTERNET_OPTION_PROXY, (LPVOID)&proxyinfo, sizeof(INTERNET_PROXY_INFO)))
{
return 0;
}
pConnect = sess.GetHttpConnection("www.baidu.com", INTERNET_FLAG_NO_AUTO_REDIRECT, 80);
pFile = pConnect->OpenRequest(CHttpConnection::HTTP_VERB_POST, pUrl);
if (!pFile->SetOption(INTERNET_OPTION_PROXY_USERNAME, proxyUser, strlen(proxyUser) + 1))
{
return 0;
}
if (!pFile->SetOption(INTERNET_OPTION_PROXY_PASSWORD, proxyPassword, strlen(proxyPassword) + 1))
{
return 0;
}
return 1;
}
catch(...)
{
return 0;
}
}
------解决方案--------------------
先正常连接到服务器对应的端口,保证物理连接的正常;然后自己构造要发送的内容,头部都是 ANSI 字符串,如 "GET ...",然后将所构造的块 send / WSASend 出去就可以了,正常情况下,服务器马上就会发回一个回应,也是字符串形式的,告诉你是否接受你的请求。
先理解 HTTP 协议内容吧。