解决方案 »
- 请问开发com组件用什么开发工具好呢
- 为什么在我的程序的两各类中一个添加dsound.h 不报错而另外一个添加后会报错?
- VC实现IP隐藏?
- Ctrl+C是不是能够结束线程?
- 天哪 怎么回事?
- 如何创建线程来监听端口的消息[ReadFile(.....)]返回啊?急求.
- NetAnts中的一个功能是怎么实现的?
- 类型LPWSTR与类型WCHAR怎么转化?
- m_pusrrcdset->m_pDatabase->ExecuteSQL("")为什么不行?老是ASSERT错误
- 请大虾给点建议!!!!!!!
- VC2008 MFC 为水晶报表关联变量报错!求解决! 急急急! 谢谢!
- 请教win7系统中使用winIO3.0可以用吗?
{
//初始化WinINet
HINTERNET hInternet = InternetOpen("Testing", INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0); //初始化WinINet
if (0 == hInternet)
{
return false;
}
//连接服务器
HINTERNET hConnect;
hConnect = InternetConnect(hInternet, m_ip.c_str(), m_port,
NULL, NULL, INTERNET_SERVICE_HTTP, 0, 0);
if (0 == hConnect)
{
if (NULL != hInternet)
{
InternetCloseHandle(hInternet);
}
return false;
}
LPCTSTR lpszVerb = "POST";//m_verb.c_str();
LPCTSTR lpszObjectName = m_path.c_str();
LPCTSTR lpszVersion = NULL; // Use default.
LPCTSTR lpszReferrer = NULL; // No referrer.
LPCTSTR *lplpszAcceptTypes = NULL; // Whatever the server wants to give us.
DWORD dwOpenRequestFlags = INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTP |
INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTPS |
INTERNET_FLAG_KEEP_CONNECTION |
INTERNET_FLAG_NO_AUTH |
INTERNET_FLAG_NO_AUTO_REDIRECT |
INTERNET_FLAG_NO_COOKIES |
INTERNET_FLAG_NO_UI |
INTERNET_FLAG_RELOAD;
DWORD dwOpenRequestContext = 0;
//打开请求
HINTERNET hOpenRequest = HttpOpenRequest(hConnect, lpszVerb,
lpszObjectName, lpszVersion, lpszReferrer, lplpszAcceptTypes,
dwOpenRequestFlags, dwOpenRequestContext);
if (0 == hOpenRequest)
{
if (NULL != hConnect)
{
InternetCloseHandle(hInternet);
}
if (NULL != hInternet)
{
InternetCloseHandle(hInternet);
}
return false;
}
if (!m_cookie.empty())
{
BOOL bAddHead = HttpAddRequestHeaders(hOpenRequest,m_cookie.c_str(),m_cookie.size(),HTTP_ADDREQ_FLAG_ADD);
DWORD dwError = GetLastError();
}// DWORD t = 1000;
// BOOL bso = InternetSetOption(hInternet,/*INTERNET_OPTION_CONNECT_TIMEOUT*//*INTERNET_OPTION_RECEIVE_TIMEOUT*/INTERNET_OPTION_SEND_TIMEOUT, &t, 4);
DWORD e = GetLastError();
//发送请求
BOOL bRequest = HttpSendRequest(hOpenRequest, NULL, 0, (void *)LoginXml.c_str(), LoginXml.size()); //发送http请求
e = GetLastError();
if (!bRequest || e == ERROR_INTERNET_TIMEOUT )
{
if (NULL != hOpenRequest)
{
InternetCloseHandle(hInternet);
}
if (NULL != hConnect)
{
InternetCloseHandle(hInternet);
}
if (NULL != hInternet)
{
InternetCloseHandle(hInternet);
}
return false;
}
//获取cookie
if (m_cookie.empty())
{
DWORD dwBufferLength = 1024;
CHAR lpBuffer[1024] = {0};
CString strSetCookie;
BOOL bHQI = HttpQueryInfo(hOpenRequest, HTTP_QUERY_SET_COOKIE, lpBuffer, &dwBufferLength, NULL);
DWORD dwError = GetLastError();
if (dwError == ERROR_INSUFFICIENT_BUFFER)
{
LPSTR lpSetCookie = new CHAR[dwBufferLength + 1];
memset(lpSetCookie, 0, dwBufferLength + 1);
HttpQueryInfo(hOpenRequest, HTTP_QUERY_COOKIE, lpBuffer, &dwBufferLength, NULL);
strSetCookie = lpSetCookie;
}
if (bHQI)
{
strSetCookie = lpBuffer;
int ix = strSetCookie.Find('=');
int ixEnd = strSetCookie.Find(';');
m_cookie = "Cookie: JSESSIONID=" + strSetCookie.Mid(ix + 1, ixEnd - ix -1);
}
} char szRes[1024 * 100] = {0};
char szBuffer[1024 * 10] = {0};
DWORD dwByteRead = 0;
while (InternetReadFile(hOpenRequest, szBuffer, sizeof(szBuffer), &dwByteRead) && dwByteRead > 0)
{
strncat(szRes, szBuffer, dwByteRead);
memset(szBuffer, 0, sizeof(szBuffer));
dwByteRead = 0;
}
ResponseXml = szRes;
InternetCloseHandle(hOpenRequest);
InternetCloseHandle(hConnect);
InternetCloseHandle(hInternet);
#ifdef _DEBUG
{
time_t t;
time(&t);
struct tm *ptr;
ptr = localtime(&t);
char nt[20] = {0};
char date[20] = {0};
char fileName[MAX_PATH] = {0};
strftime(nt, 20, "%Y-%m-%d/%H:%M:%S", ptr);
strftime(date, 20, "%Y-%m-%d", ptr);
sprintf(fileName, "./ProtocolLog/%s.txt", date); ofstream of;
of.open(fileName, ofstream::out | ofstream::app);
CXmlParse xp;
xp.Parse(ResponseXml.c_str());
string req;
xp.PrintXml(req);
of << "时间:" << nt << endl;
of << "请求包:" << LoginXml << endl;
of << "应答包:" << req << endl;
}
#endif
return true
}
换WinHTTP试试吧,接口名字相仿,使用过程也一样的。Http应用的话,比WinINet好用些。
http://download.csdn.net/detail/geoff08zhang/4571358