用下面的代码post xml到服务器页。
客户端不需要证书。
但是收不到任何数据,发送似乎也不成功,但是服务器是远端的没法调试。
抓包看了一下发出去的数据包确实是HTTPS包。
但就是不成功。没思路了抓狂。请教高人相助啊!分也就剩60了抱歉!
嫌不够我再用另一个账号给。参考的这篇文章
http://www.codeproject.com/internet/wininet_ssl___certificate.asp?df=100&forumid=15078&exp=0&select=930788#xx930788xx
BOOL CXXX::SendHttpRequest(CString strXml, CString &strRcv)
{
void* m_hInternet = NULL;
void* m_hSession = NULL;
void* m_hRequest = NULL;
void* m_hStore = NULL;
void* m_pContext = NULL; int m_secureFlags = INTERNET_FLAG_RELOAD|INTERNET_FLAG_KEEP_CONNECTION|INTERNET_FLAG_NO_CACHE_WRITE|
INTERNET_FLAG_SECURE|INTERNET_FLAG_IGNORE_CERT_CN_INVALID; try
{
m_hInternet = InternetOpen("MY app", INTERNET_OPEN_TYPE_PRECONFIG , NULL, NULL, 0);
if (!m_hInternet)
{
::AfxMessageBox("Cannot open internet");
//m_lastErrorCode = GetLastError();
return false;
}
m_hSession = InternetConnect(m_hInternet, "www.XXX.com", 443, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 0);
if (!m_hSession) {
::AfxMessageBox("Cannot connect to internet");
//m_lastErrorCode = GetLastError();
//ClearHandles();
return false;
}
m_hRequest = HttpOpenRequest(m_hSession,
"POST",
"/service/page.cgi",
NULL,
"",
NULL,
m_secureFlags,
0);
if (!m_hRequest) {
::AfxMessageBox("Cannot perform http request");
//m_lastErrorCode = GetLastError();
//ClearHandles();
return false;
}
int result = HttpSendRequest(m_hRequest, NULL, 0, (void*)((LPCTSTR)strXml), strXml.GetLength());
if (result)
{
::AfxMessageBox("yes");//能执行到这里
}
}
catch(...) {
::AfxMessageBox("Memory Exception occured");
//m_lastErrorCode = GetLastError();
return false;
} DWORD dwNumberOfBytesRead;
char sz[2048];
int result;
strRcv = "";
do
{
result = InternetReadFile(m_hRequest, sz, 2047, &dwNumberOfBytesRead);
sz[dwNumberOfBytesRead] = '\0';
int x = strlen(sz);
strRcv += sz;
memset(sz, 0, 2048);
} while(result && dwNumberOfBytesRead != 0); ::AfxMessageBox(strRcv);//strRcv为空,收不到任何数据?
return TRUE;
}
客户端不需要证书。
但是收不到任何数据,发送似乎也不成功,但是服务器是远端的没法调试。
抓包看了一下发出去的数据包确实是HTTPS包。
但就是不成功。没思路了抓狂。请教高人相助啊!分也就剩60了抱歉!
嫌不够我再用另一个账号给。参考的这篇文章
http://www.codeproject.com/internet/wininet_ssl___certificate.asp?df=100&forumid=15078&exp=0&select=930788#xx930788xx
BOOL CXXX::SendHttpRequest(CString strXml, CString &strRcv)
{
void* m_hInternet = NULL;
void* m_hSession = NULL;
void* m_hRequest = NULL;
void* m_hStore = NULL;
void* m_pContext = NULL; int m_secureFlags = INTERNET_FLAG_RELOAD|INTERNET_FLAG_KEEP_CONNECTION|INTERNET_FLAG_NO_CACHE_WRITE|
INTERNET_FLAG_SECURE|INTERNET_FLAG_IGNORE_CERT_CN_INVALID; try
{
m_hInternet = InternetOpen("MY app", INTERNET_OPEN_TYPE_PRECONFIG , NULL, NULL, 0);
if (!m_hInternet)
{
::AfxMessageBox("Cannot open internet");
//m_lastErrorCode = GetLastError();
return false;
}
m_hSession = InternetConnect(m_hInternet, "www.XXX.com", 443, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 0);
if (!m_hSession) {
::AfxMessageBox("Cannot connect to internet");
//m_lastErrorCode = GetLastError();
//ClearHandles();
return false;
}
m_hRequest = HttpOpenRequest(m_hSession,
"POST",
"/service/page.cgi",
NULL,
"",
NULL,
m_secureFlags,
0);
if (!m_hRequest) {
::AfxMessageBox("Cannot perform http request");
//m_lastErrorCode = GetLastError();
//ClearHandles();
return false;
}
int result = HttpSendRequest(m_hRequest, NULL, 0, (void*)((LPCTSTR)strXml), strXml.GetLength());
if (result)
{
::AfxMessageBox("yes");//能执行到这里
}
}
catch(...) {
::AfxMessageBox("Memory Exception occured");
//m_lastErrorCode = GetLastError();
return false;
} DWORD dwNumberOfBytesRead;
char sz[2048];
int result;
strRcv = "";
do
{
result = InternetReadFile(m_hRequest, sz, 2047, &dwNumberOfBytesRead);
sz[dwNumberOfBytesRead] = '\0';
int x = strlen(sz);
strRcv += sz;
memset(sz, 0, 2048);
} while(result && dwNumberOfBytesRead != 0); ::AfxMessageBox(strRcv);//strRcv为空,收不到任何数据?
return TRUE;
}
解决方案 »
- 如果已经熟悉c++,C#,如何快速上手vc?
- 保存文件时怎样设置CFileDialog默认文件名,要求文件名取当前的日期,是一变量
- 我使用字体对话框,GetLogFont(&logfont),logfont.lfHeight为负,如何转化为毫米?!
- 怎么样在一个main()函数中设置两个服务器程序
- 主线程中能否清理辅线程中未释放的资源?急
- 我在进行sql数据库编程时,有一个字段我设为int,但是程序程序运行后结果却是smallint,这样就影响到了我的取值,请问各位高手,这是什么原因?
- ListBox的背景如何变灰
- 一个多线程应用中的怪问题:如何在多线程程序中正确使用主线程的主窗口?
- 各位ggjjddmm还是一个关于ActiveX控件的问题。我很急呀。前两天发了一个帖子,可是没人理,在发一个,这回给100分啦!在线等待!
- 方法能比什么都快?
- “网络游戏防沉迷系统”开发遇到难题————这是我的毕业设计
- <<<<<<<<<<免费skype插件发布,散分1000
secureFlags2 = INTERNET_FLAG_EXISTING_CONNECT(普通post)
则无法连接服务器, m_secureFlags = INTERNET_FLAG_RELOAD|INTERNET_FLAG_KEEP_CONNECTION|INTERNET_FLAG_NO_CACHE_WRITE|
INTERNET_FLAG_SECURE|INTERNET_FLAG_IGNORE_CERT_CN_INVALID;可以连上,但是post没法反应也没有响应是怎么回事啊