这段POST程序为什么Read不到返回的数据呀?

kezhon 2008-05-17 01:54:38
		CInternetSession session;
CHttpConnection* pConnection =session.GetHttpConnection("exporter.alibaba.com"); //网站服务器
CHttpFile* pFile = pConnection->OpenRequest(CHttpConnection::HTTP_VERB_POST,"/exporter/sendCsLeadsAction.html"); //直接向投票处理页面提交数据
//下面向提交数据中添加HTTP头,这些可以由网络监视器得到
pFile->AddRequestHeaders(_T("Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-ms-application, application/vnd.ms-xpsdocument, application/xaml+xml, application/x-ms-xbap, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-silverlight, */*"));
pFile->AddRequestHeaders(_T("Referer: http://exporter.alibaba.com/exporter/registry.html?srctrace=y&originType=50"));
pFile->AddRequestHeaders(_T("Accept-Language: zh-cn"));
pFile->AddRequestHeaders(_T("Content-Type: application/x-www-form-urlencoded"));
pFile->AddRequestHeaders(_T("UA-CPU: x86"));
pFile->AddRequestHeaders(_T("Accept-Encoding: gzip, deflate"));
pFile->AddRequestHeaders(_T("User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.04506; .NET CLR 3.5.21022)"));
pFile->AddRequestHeaders(_T("Host: exporter.alibaba.com"));
pFile->AddRequestHeaders(_T("Content-Length: 1238"));
pFile->AddRequestHeaders(_T("Connection: Keep-Alive"));
pFile->AddRequestHeaders(_T("Cache-Control: no-cache"));
pFile->AddRequestHeaders(_T("Cookie: ali_apache_id=221.232.223.51.1204690406902.0; __last_loginid__=kezhon; ali_apache_track=c_mt=2|c_mid=kezhon|c_lid=kezhon|c_ms=1; _intl_temp_other_=/z2HMndRfnwramL4FO/BB/Gt82aZ2PyoTRSiosV4cFEqfPmAC52wBhRx+Vu7SgdE; ali_apache_tracktmp=; ali_apache_sid=211.69.161.68.1207216999217.8|1207218815; JSESSIONID=DB1872374DA672B97E0C5A3A11EAAAA5"));
//HTTP头后面就应该是真正的数据了,下面theApp.m_strFormData中就是要提交的数据,服务器处理返回的信息在pFile中
CString m_strFormData=_T("name=%E7%8E%8B%E5%B2%9A&emailprefix=znuse&mail_postfix=163.com&mail_post=&companyName=%E8%93%9D%E8%B0%83%E5%A1%91%E8%83%B6%E6%9C%89%E9%99%90%E5%85%AC%E5%8F%B8&countryName=%E4%B8%AD%E5%9B%BD&country=China&province=province5&provinceName=%E5%B9%BF%E4%B8%9C%E7%9C%81&provinceValue=province5&city=city45&cityName=%E5%B9%BF%E5%B7%9E%E5%B8%82&county=country237&countyName=%E5%B9%BF%E5%B7%9E%E5%B8%82¬CNCity=&companyAddress=%E7%8E%AF%E5%B8%82%E4%B8%AD%E8%B7%AF15%E5%8F%B7&countryCode=%2B86&workPhoneArea=020&workPhoneNumber=85627546&industry=100000080&mobilePhone=&consultation=%E6%88%91%E6%84%BF%E6%84%8F%E6%94%B6%E5%88%B0%E9%98%BF%E9%87%8C%E5%B7%B4%E5%B7%B4%E6%96%B0%E4%BA%A7%E5%93%81%2F%E6%9C%8D%E5%8A%A1%E7%9A%84%E9%80%9A%E7%9F%A5%E4%BF%A1&email=znuse@163.com&address=%E4%B8%AD%E5%9B%BD%2C%E5%B9%BF%E4%B8%9C%E7%9C%81%2C%E5%B9%BF%E5%B7%9E%E5%B8%82%2C%E5%B9%BF%E5%B7%9E%E5%B8%82%2C%E7%8E%AF%E5%B8%82%E4%B8%AD%E8%B7%AF15%E5%8F%B7&subject=Mini%E4%BE%9B%E5%BA%94%E5%95%86%E6%8B%9B%E5%95%86%E5%8F%8D%E9%A6%88&phone=%2B86-020-85627546&remark=%E5%9C%A8%E5%9B%BD%E9%99%85%E7%AB%99%E6%8F%90%E4%BA%A4%E6%B3%A8%E5%86%8C%E5%9B%BD%E9%99%85%E7%AB%99%E4%BC%9A%E5%91%98%E7%94%B3%E8%AF%B7&needFeedbackEmail=Y&submitbtn2=%E6%B3%A8%E5%86%8C%E4%BC%9A%E5%91%98");
pFile->SendRequest(NULL,0,m_strFormData.GetBuffer(0),m_strFormData.GetLength()); //提交所有数据


//其实到这里投票已经可以结束了,不过你如果想看看成果,完全可以把返回的页面分析分析,得到些数据
char szBuffer[11001]; //用来存放返回的处理页面,要多大看实际情况。当然也可以动态分配,不嫌累的话
int nLen=pFile->Read(szBuffer,11000);//读取返回的内容,其实是投票结果页面的HTML代码
szBuffer[nLen]=0;
CString strTemp=szBuffer; //CString虽然滥了些,但用着就是方便,嘿嘿~
pFile->Close(); //数据读出来后把该关闭的东西都关掉
pConnection->Close();
delete pFile;
delete pConnection;
session.Close();
MessageBox(strTemp);
最后strTemp="?"
这是为何呢?
...全文
275 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
kezhon 2008-05-21
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 greatws 的回复:]
pFile->AddRequestHeaders("Accept-Encoding: gzip, deflate");

你解码要用gzip解码才能正常显示
[/Quote]用什么方法可以解码?
greatws 2008-05-19
  • 打赏
  • 举报
回复
pFile->AddRequestHeaders(_T("Accept-Encoding: gzip, deflate"));

你把这行注释掉试试
greatws 2008-05-19
  • 打赏
  • 举报
回复
pFile->AddRequestHeaders("Accept-Encoding: gzip, deflate");

你解码要用gzip解码才能正常显示
jameshooo 2008-05-18
  • 打赏
  • 举报
回复
WideCharToMultiByte
jameshooo 2008-05-18
  • 打赏
  • 举报
回复
3楼的代码提供了utf-8到UNICODE的转换MultiByteToWideChar,你反过来用WideCharToMultiByte转换回去就行了
kezhon 2008-05-18
  • 打赏
  • 举报
回复
注释掉的是你的部分代码
kezhon 2008-05-18
  • 打赏
  • 举报
回复
		CInternetSession session;
CHttpConnection* pConnection =session.GetHttpConnection("exporter.alibaba.com"); //网站服务器
CHttpFile* pFile = pConnection->OpenRequest(CHttpConnection::HTTP_VERB_POST,"/exporter/sendCsLeadsAction.html"); //直接向投票处理页面提交数据
//下面向提交数据中添加HTTP头,这些可以由网络监视器得到
pFile->AddRequestHeaders("Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-ms-application, application/vnd.ms-xpsdocument, application/xaml+xml, application/x-ms-xbap, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-silverlight, */*");
pFile->AddRequestHeaders("Referer: http://exporter.alibaba.com/exporter/registry.html?srctrace=y&originType=50");
pFile->AddRequestHeaders("Accept-Language: zh-cn");
pFile->AddRequestHeaders("Content-Type: application/x-www-form-urlencoded");
pFile->AddRequestHeaders("UA-CPU: x86");
pFile->AddRequestHeaders("Accept-Encoding: gzip, deflate");
pFile->AddRequestHeaders("User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.04506; .NET CLR 3.5.21022)");
pFile->AddRequestHeaders("Host: exporter.alibaba.com");
pFile->AddRequestHeaders("Content-Length: 1238");
pFile->AddRequestHeaders("Connection: Keep-Alive");
pFile->AddRequestHeaders("Cache-Control: no-cache");
pFile->AddRequestHeaders("Cookie: ali_apache_id=221.232.223.51.1204690406902.0; __last_loginid__=kezhon; ali_apache_track=c_mt=2|c_mid=kezhon|c_lid=kezhon|c_ms=1; _intl_temp_other_=/z2HMndRfnwramL4FO/BB/Gt82aZ2PyoTRSiosV4cFEqfPmAC52wBhRx+Vu7SgdE; ali_apache_tracktmp=; ali_apache_sid=211.69.161.68.1207216999217.8|1207218815; JSESSIONID=DB1872374DA672B97E0C5A3A11EAAAA5");
//HTTP头后面就应该是真正的数据了,下面theApp.m_strFormData中就是要提交的数据,服务器处理返回的信息在pFile中
CString m_strFormData=_T("name=%E7%8E%8B%E5%B2%9A&emailprefix=znuse&mail_postfix=163.com&mail_post=&companyName=%E8%93%9D%E8%B0%83%E5%A1%91%E8%83%B6%E6%9C%89%E9%99%90%E5%85%AC%E5%8F%B8&countryName=%E4%B8%AD%E5%9B%BD&country=China&province=province5&provinceName=%E5%B9%BF%E4%B8%9C%E7%9C%81&provinceValue=province5&city=city45&cityName=%E5%B9%BF%E5%B7%9E%E5%B8%82&county=country237&countyName=%E5%B9%BF%E5%B7%9E%E5%B8%82¬CNCity=&companyAddress=%E7%8E%AF%E5%B8%82%E4%B8%AD%E8%B7%AF15%E5%8F%B7&countryCode=%2B86&workPhoneArea=020&workPhoneNumber=85627546&industry=100000080&mobilePhone=&consultation=%E6%88%91%E6%84%BF%E6%84%8F%E6%94%B6%E5%88%B0%E9%98%BF%E9%87%8C%E5%B7%B4%E5%B7%B4%E6%96%B0%E4%BA%A7%E5%93%81%2F%E6%9C%8D%E5%8A%A1%E7%9A%84%E9%80%9A%E7%9F%A5%E4%BF%A1&email=znuse@163.com&address=%E4%B8%AD%E5%9B%BD%2C%E5%B9%BF%E4%B8%9C%E7%9C%81%2C%E5%B9%BF%E5%B7%9E%E5%B8%82%2C%E5%B9%BF%E5%B7%9E%E5%B8%82%2C%E7%8E%AF%E5%B8%82%E4%B8%AD%E8%B7%AF15%E5%8F%B7&subject=Mini%E4%BE%9B%E5%BA%94%E5%95%86%E6%8B%9B%E5%95%86%E5%8F%8D%E9%A6%88&phone=%2B86-020-85627546&remark=%E5%9C%A8%E5%9B%BD%E9%99%85%E7%AB%99%E6%8F%90%E4%BA%A4%E6%B3%A8%E5%86%8C%E5%9B%BD%E9%99%85%E7%AB%99%E4%BC%9A%E5%91%98%E7%94%B3%E8%AF%B7&needFeedbackEmail=Y&submitbtn2=%E6%B3%A8%E5%86%8C%E4%BC%9A%E5%91%98");
pFile->SendRequest(NULL,0,(LPVOID)(LPCTSTR)m_strFormData,m_strFormData.GetLength()); //提交所有数据


// //其实到这里投票已经可以结束了,不过你如果想看看成果,完全可以把返回的页面分析分析,得到些数据
// WCHAR szBuffer[1024]; //用来存放返回的处理页面,要多大看实际情况。当然也可以动态分配,不嫌累的话
// int nLen=pFile->Read(szBuffer,1024);//读取返回的内容,其实是投票结果页面的HTML代码
// szBuffer[nLen]=0;
// CString strTemp(szBuffer); //CString虽然滥了些,但用着就是方便,嘿嘿~
// pFile->Close(); //数据读出来后把该关闭的东西都关掉
// pConnection->Close();
// delete pFile;
// delete pConnection;
// session.Close();
// MessageBox(strTemp);


//CString strHeaders =_T("Content-Type: application/x-www-form-urlencoded\r\n");
// CString strFormData;
// strFormData=_T("name=%E7%8E%8B%E5%B2%9A&emailprefix=znuse&mail_postfix=163.com&mail_post=&companyName=%E8%93%9D%E8%B0%83%E5%A1%91%E8%83%B6%E6%9C%89%E9%99%90%E5%85%AC%E5%8F%B8&countryName=%E4%B8%AD%E5%9B%BD&country=China&province=province5&provinceName=%E5%B9%BF%E4%B8%9C%E7%9C%81&provinceValue=province5&city=city45&cityName=%E5%B9%BF%E5%B7%9E%E5%B8%82&county=country237&countyName=%E5%B9%BF%E5%B7%9E%E5%B8%82¬CNCity=&companyAddress=%E7%8E%AF%E5%B8%82%E4%B8%AD%E8%B7%AF15%E5%8F%B7&countryCode=%2B86&workPhoneArea=020&workPhoneNumber=85627546&industry=100000080&mobilePhone=&consultation=%E6%88%91%E6%84%BF%E6%84%8F%E6%94%B6%E5%88%B0%E9%98%BF%E9%87%8C%E5%B7%B4%E5%B7%B4%E6%96%B0%E4%BA%A7%E5%93%81%2F%E6%9C%8D%E5%8A%A1%E7%9A%84%E9%80%9A%E7%9F%A5%E4%BF%A1&email=znuse@163.com&address=%E4%B8%AD%E5%9B%BD%2C%E5%B9%BF%E4%B8%9C%E7%9C%81%2C%E5%B9%BF%E5%B7%9E%E5%B8%82%2C%E5%B9%BF%E5%B7%9E%E5%B8%82%2C%E7%8E%AF%E5%B8%82%E4%B8%AD%E8%B7%AF15%E5%8F%B7&subject=Mini%E4%BE%9B%E5%BA%94%E5%95%86%E6%8B%9B%E5%95%86%E5%8F%8D%E9%A6%88&phone=%2B86-020-85627546&remark=%E5%9C%A8%E5%9B%BD%E9%99%85%E7%AB%99%E6%8F%90%E4%BA%A4%E6%B3%A8%E5%86%8C%E5%9B%BD%E9%99%85%E7%AB%99%E4%BC%9A%E5%91%98%E7%94%B3%E8%AF%B7&needFeedbackEmail=Y&submitbtn2=%E6%B3%A8%E5%86%8C%E4%BC%9A%E5%91%98");//hl=zh-CN&ie=UTF-8&text=i+am+a+boy&langpair=en%7Czh-CN");

/* CInternetSession session;
CHttpConnection* pConnection =session.GetHttpConnection("exporter.alibaba.com",(INTERNET_PORT)80);
CHttpFile* pFile =pConnection->OpenRequest(CHttpConnection::HTTP_VERB_POST,"/exporter/sendCsLeadsAction.html");
BOOL result = pFile->SendRequest(strHeaders,(LPVOID)(LPCTSTR)strFormData, strFormData.GetLength());*/
CString szU8Buf;
int nlen;
CStringW u8("");
while(pFile->ReadString(szU8Buf))
{
nlen=szU8Buf.GetLength();
int nWCHAR=MultiByteToWideChar(CP_UTF8,0,szU8Buf,nlen,NULL,0);
WCHAR* szUnicode=new WCHAR[nWCHAR+1];
MultiByteToWideChar(CP_UTF8,0,szU8Buf,nlen,szUnicode,nWCHAR);
szUnicode[nWCHAR]='\0';
u8+=szUnicode;
u8+=L"\r\n";
delete[] szUnicode;
}


pFile->Close();
pConnection->Close();
delete pFile;
delete pConnection;
session.Close();

CString xx;
xx=UnicodeToUTF8(u8);
// FILE* fp;
// fp=fopen("1.htm","wb"); //保存成文件,编码为unicode
// fwrite(xx,xx.GetLength(),1,fp);
// fclose(fp);
CFile cfile;
cfile.Open(_T("1.htm"), CFile::modeCreate | CFile::modeReadWrite);
cfile.Write(xx,xx.GetLength());
cfile.Flush();

MessageBoxW(NULL,u8,u8,MB_OK);
kezhon 2008-05-17
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 jameshooo 的回复:]
转换成utf-8再保存
[/Quote]怎么转换
jameshooo 2008-05-17
  • 打赏
  • 举报
回复
转换成utf-8再保存
kezhon 2008-05-17
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 greatws 的回复:]
第一,你那个buffer不够大,第二,页面是utf8的,要正常显示,需要转换成unicode或者ansi


C/C++ codevoidCTranslationDlg::OnBnClickedButton1()
{
CString strHeaders=_T("Content-Type: application/x-www-form-urlencoded\r\n");
CString strFormData;
strFormData=_T("name=%E7%8E%8B%E5%B2%9A&emailprefix=znuse&mail_postfix=163.com&mail_post=&companyName=%E8%93%9D%E8%B0%83%E5%A1%91%E8%…
[/Quote]此刻已实在难以形容我对阁下的敬重,崇拜与感激之情,先说个谢谢哈!
另外有两个疑问:
1.我上面AddRequestHeader加的那一大堆东西是不是都是不必要的?如果不加这些东西,网站服务器会不会从中发现什么不正常的东西!
2.最后保存的1.htm文件,浏览器打开后汉字部分是乱码,是不是在保存之前该怎么转换一下,具体怎么转换呢?
哎,我越来越发现我菜得惊人,还是你们都太强悍了呢?搜索、查资料,查一天也搞不定!
greatws 2008-05-17
  • 打赏
  • 举报
回复
第一,你那个buffer不够大,第二,页面是utf8的,要正常显示,需要转换成unicode或者ansi



void CTranslationDlg::OnBnClickedButton1()
{
CString strHeaders =_T("Content-Type: application/x-www-form-urlencoded\r\n");
CString strFormData;
strFormData=_T("name=%E7%8E%8B%E5%B2%9A&emailprefix=znuse&mail_postfix=163.com&mail_post=&companyName=%E8%93%9D%E8%B0%83%E5%A1%91%E8%83%B6%E6%9C%89%E9%99%90%E5%85%AC%E5%8F%B8&countryName=%E4%B8%AD%E5%9B%BD&country=China&province=province5&provinceName=%E5%B9%BF%E4%B8%9C%E7%9C%81&provinceValue=province5&city=city45&cityName=%E5%B9%BF%E5%B7%9E%E5%B8%82&county=country237&countyName=%E5%B9%BF%E5%B7%9E%E5%B8%82¬CNCity=&companyAddress=%E7%8E%AF%E5%B8%82%E4%B8%AD%E8%B7%AF15%E5%8F%B7&countryCode=%2B86&workPhoneArea=020&workPhoneNumber=85627546&industry=100000080&mobilePhone=&consultation=%E6%88%91%E6%84%BF%E6%84%8F%E6%94%B6%E5%88%B0%E9%98%BF%E9%87%8C%E5%B7%B4%E5%B7%B4%E6%96%B0%E4%BA%A7%E5%93%81%2F%E6%9C%8D%E5%8A%A1%E7%9A%84%E9%80%9A%E7%9F%A5%E4%BF%A1&email=znuse@163.com&address=%E4%B8%AD%E5%9B%BD%2C%E5%B9%BF%E4%B8%9C%E7%9C%81%2C%E5%B9%BF%E5%B7%9E%E5%B8%82%2C%E5%B9%BF%E5%B7%9E%E5%B8%82%2C%E7%8E%AF%E5%B8%82%E4%B8%AD%E8%B7%AF15%E5%8F%B7&subject=Mini%E4%BE%9B%E5%BA%94%E5%95%86%E6%8B%9B%E5%95%86%E5%8F%8D%E9%A6%88&phone=%2B86-020-85627546&remark=%E5%9C%A8%E5%9B%BD%E9%99%85%E7%AB%99%E6%8F%90%E4%BA%A4%E6%B3%A8%E5%86%8C%E5%9B%BD%E9%99%85%E7%AB%99%E4%BC%9A%E5%91%98%E7%94%B3%E8%AF%B7&needFeedbackEmail=Y&submitbtn2=%E6%B3%A8%E5%86%8C%E4%BC%9A%E5%91%98");//hl=zh-CN&ie=UTF-8&text=i+am+a+boy&langpair=en%7Czh-CN");

CInternetSession session;
CHttpConnection* pConnection =session.GetHttpConnection("exporter.alibaba.com",(INTERNET_PORT)80);
CHttpFile* pFile =pConnection->OpenRequest(CHttpConnection::HTTP_VERB_POST,"/exporter/sendCsLeadsAction.html");
BOOL result = pFile->SendRequest(strHeaders,(LPVOID)(LPCTSTR)strFormData, strFormData.GetLength());
CString szU8Buf;
int nlen;
CStringW u8("");
while(pFile->ReadString(szU8Buf))
{
nlen=szU8Buf.GetLength();
int nWCHAR=MultiByteToWideChar(CP_UTF8,0,szU8Buf,nlen,NULL,0);
WCHAR* szUnicode=new WCHAR[nWCHAR+1];
MultiByteToWideChar(CP_UTF8,0,szU8Buf,nlen,szUnicode,nWCHAR);
szUnicode[nWCHAR]='\0';
u8+=szUnicode;
u8+=L"\r\n";
delete[] szUnicode;
}


pFile->Close();
pConnection->Close();
delete pFile;
delete pConnection;
session.Close();


FILE* fp;
fp=fopen("1.htm","wb"); //保存成文件,编码为unicode
fwrite((LPCSTR)(LPCWSTR)u8,u8.GetLength()*sizeof(WCHAR),1,fp);
fclose(fp);

MessageBoxW(NULL,u8,u8,MB_OK);

zkezhon 2008-05-17
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 akirya 的回复:]
你先用抓包工具抓包看看,有没有回复
[/Quote]抓包显示有完整的网页回复,而且是提交成功的网页!
但是我的代码怎么Read不到回复的内容呢?
  • 打赏
  • 举报
回复
你先用抓包工具抓包看看,有没有回复

18,357

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧