利用http隧道传输文件 想实现利用http隧道传输文件,在公网上,这个应该能实现的,因为好多网站上有 HTTP下载 之类的。我对http协议还一知半解,那位做过这方面的兄弟给介绍下怎么做。有源码参考的更好。[email protected].谢谢了。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 技术上容易实现,关键是作为HTTP的服务端必须做相应的处理,把请求变成文件的上传下载 这个是从该网站查询数据,返回一个html文件,希望对你有点启示!---------------------------------------------------------------------------这是个html页面,网站:http://www.ip138.com:8080/search.asp 在VC中我如何编写代码获取返回的信息,例如在对话框模式下,一个Edit,一个Button,在一个Edit中输入手机号码,点击Button后要求返回查询手机号码的信息! 这下面的该论坛的一个达人写的一个方法: void CCMDlg::Post(CString &csResponse,const char *szServer,INTERNET_PORT &nPort,const char *szObject,const char *szData,DWORD &dwHttpStatus,BOOL bAutoRedirect) { //参数说明: /* csResponse:返回的数据 szServer:服务器 nPort:端口 szObject:URI szData:正文内容 dwHttpStatus:状态码 bAutoRedirect:是否自动转向 */ CInternetSession *pSession=NULL; CHttpConnection *pConnection=NULL; CHttpFile *pHttpFile=NULL; try{ pSession=new CInternetSession(NULL,1,INTERNET_OPEN_TYPE_PRECONFIG); pConnection=pSession->GetHttpConnection(szServer,nPort,NULL,NULL); DWORD dwFlag=INTERNET_FLAG_EXISTING_CONNECT ¦INTERNET_FLAG_RELOAD ¦INTERNET_FLAG_DONT_CACHE; if(!bAutoRedirect) { dwFlag=dwFlag ¦INTERNET_FLAG_NO_AUTO_REDIRECT; } pHttpFile=pConnection->OpenRequest(CHttpConnection::HTTP_VERB_POST,szObject,szServer,1,NULL,NULL,dwFlag); pHttpFile->AddRequestHeaders("Content-Type: appliction/x-www-form-urlencoded",HTTP_ADDREQ_FLAG_ADD_IF_NEW,-1L); pHttpFile->SendRequest(NULL,0,(LPVOID)szData,strlen(szData)); if(pHttpFile) { if(pHttpFile->QueryInfoStatusCode(dwHttpStatus)!=0) { //dwHttpStatus=200; if(dwHttpStatus <400) { int nRead=0; LPSTR pBuffer=new char[1024]; do{ nRead=pHttpFile->Read(pBuffer,1023); if(nRead!=0) { pBuffer[nRead]=0; csResponse+=pBuffer; } }while(nRead!=0); if(pBuffer) { delete pBuffer; pBuffer=NULL; } } } } }catch(CInternetException *e) { e->Delete(); } catch(...) { } if(pHttpFile!=NULL) { pHttpFile->Close(); delete pHttpFile; } if(pConnection!=NULL) { pConnection->Close(); delete pConnection; } if(pSession!=NULL) { pSession->Close(); delete pSession; } } 我在下面的这个函数中响应按钮点击事件 void CCMDlg::OnBnClickedOk() { CString csResponse; CString sPhone; GetDlgItemText(IDC_EDIT1,sPhone); INTERNET_PORT nPort=8080; DWORD dwRes=0; //AfxMessageBox(sPhone); CString strData="mobileform:"; strData+=sPhone; Post(csResponse,"www.ip138.com",nPort,"search.asp",strData,dwRes,TRUE); //AfxMessageBox(csResponse); SetDlgItemText(IDC_EDIT1,csResponse); } http://topic.csdn.net/t/20040627/12/3126011.html 客户端和服务器都要自己处理,麻烦。----因为好多网站上有 HTTP下载 之类的----这个是因为很多网站有http和ftp来存储文件,为了区分所以说点这个http下载,点那个ftp下载,点另外个bt下载。 考你们个问题,看知不知道 vc 定义的窗体CWND ,如何显示在DELPHI PANEL 上面 为何我得到的PNG图片的尺寸不对? 跨工程的调用问题 VC + socket 客户端 收包 与 处理包 同步问题 字符串"0x91 ; 单元说明 "如何转换为十进制145? ﹂◆◆◆◆◆ win9x下如何对付“双进程保护”的程序? 请教一个小问题 100分求助VC++6.0下载地址!最好不要FTP! 绘图后清除客户区用什末函数 关于同步的疑问 矢量图形编辑器的开发思路是什么。
---------------------------------------------------------------------------
这是个html页面,网站:http://www.ip138.com:8080/search.asp
在VC中我如何编写代码获取返回的信息,例如在对话框模式下,一个Edit,一个Button,在一个Edit中输入手机号码,点击Button后要求返回查询手机号码的信息!
这下面的该论坛的一个达人写的一个方法:
void CCMDlg::Post(CString &csResponse,const char *szServer,INTERNET_PORT &nPort,const char *szObject,const char *szData,DWORD &dwHttpStatus,BOOL bAutoRedirect)
{
//参数说明:
/*
csResponse:返回的数据
szServer:服务器
nPort:端口
szObject:URI
szData:正文内容
dwHttpStatus:状态码
bAutoRedirect:是否自动转向
*/
CInternetSession *pSession=NULL;
CHttpConnection *pConnection=NULL;
CHttpFile *pHttpFile=NULL; try{
pSession=new CInternetSession(NULL,1,INTERNET_OPEN_TYPE_PRECONFIG);
pConnection=pSession->GetHttpConnection(szServer,nPort,NULL,NULL);
DWORD dwFlag=INTERNET_FLAG_EXISTING_CONNECT ¦INTERNET_FLAG_RELOAD ¦INTERNET_FLAG_DONT_CACHE; if(!bAutoRedirect)
{
dwFlag=dwFlag ¦INTERNET_FLAG_NO_AUTO_REDIRECT;
}
pHttpFile=pConnection->OpenRequest(CHttpConnection::HTTP_VERB_POST,szObject,szServer,1,NULL,NULL,dwFlag); pHttpFile->AddRequestHeaders("Content-Type: appliction/x-www-form-urlencoded",HTTP_ADDREQ_FLAG_ADD_IF_NEW,-1L); pHttpFile->SendRequest(NULL,0,(LPVOID)szData,strlen(szData));
if(pHttpFile)
{
if(pHttpFile->QueryInfoStatusCode(dwHttpStatus)!=0)
{
//dwHttpStatus=200;
if(dwHttpStatus <400)
{
int nRead=0;
LPSTR pBuffer=new char[1024];
do{
nRead=pHttpFile->Read(pBuffer,1023);
if(nRead!=0)
{
pBuffer[nRead]=0;
csResponse+=pBuffer;
}
}while(nRead!=0);
if(pBuffer)
{
delete pBuffer;
pBuffer=NULL;
}
}
}
}
}catch(CInternetException *e)
{
e->Delete();
}
catch(...)
{ }
if(pHttpFile!=NULL)
{
pHttpFile->Close();
delete pHttpFile;
}
if(pConnection!=NULL)
{
pConnection->Close();
delete pConnection;
}
if(pSession!=NULL)
{
pSession->Close();
delete pSession;
}
}
我在下面的这个函数中响应按钮点击事件
void CCMDlg::OnBnClickedOk()
{
CString csResponse;
CString sPhone;
GetDlgItemText(IDC_EDIT1,sPhone);
INTERNET_PORT nPort=8080;
DWORD dwRes=0;
//AfxMessageBox(sPhone);
CString strData="mobileform:";
strData+=sPhone;
Post(csResponse,"www.ip138.com",nPort,"search.asp",strData,dwRes,TRUE);
//AfxMessageBox(csResponse);
SetDlgItemText(IDC_EDIT1,csResponse);
}
因为好多网站上有 HTTP下载 之类的
----
这个是因为很多网站有http和ftp来存储文件,为了区分所以说点这个http下载,点那个ftp下载,点另外个bt下载。