CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  HTML/XML

问题紧急,望各位不吝赐教!!

楼主yuezimmx(云中客)2003-09-04 00:57:17 在 VC/MFC / HTML/XML 提问

现在小弟遇到这样一个问题:  
   
  利用CGI程序实现跨平台查询(这些平台可能其他公司开发),  
  即在多个WEB服务器之间查询数据,  
  然后将查询得到的数据进行分析后转换为我们开发的系统  
  所呈现的页面。我是利用C   WinInet编程实现的,现在简单的查询  
  可以利用URL上的参数字符串实现。  
   
  但现在遇到这样一个问题:很多WEB服务器都需要身份认证,即需要  
  先输入用户和密码后才能正确查询,并且有很多的查询参数也不是  
  在URL上直接指定的,好像是通过一个COOKIE(本人对COOKIE也不熟悉)。  
  来传递条件的。  
   
  我现在很想知道怎样才能通过程序模拟登陆WEB服务器并且实现查询,  
  关键是怎么通过程序输入用户和密码并且获得对方WEB服务器认证。  
   
  我不知道我是否讲清楚了我的问题,如果各位有这方面C的编程经验,  
  还望不吝赐教,谢谢各位了。 问题点数:0、回复次数:2Top

1 楼masterz(www.fruitfruit.com)回复于 2003-09-06 12:31:11 得分 0

void   post()  
  {  
          CInternetSession   session("My   Session");  
          CHttpConnection*   pServer   =   NULL;  
          CHttpFile*   pFile   =   NULL;  
          CString   ServerName   =   "webmail.21cn.com";  
          INTERNET_PORT   nPort   =   80;  
          DWORD   retcode;  
          char   outBuff[300]   =   "LoginName=aaa&passwd=xxx&DomainName=21cn.com";//I   have   test   this   with   my   loginname   and   password  
          try  
          {  
                  pServer   =   session.GetHttpConnection(ServerName,nPort);  
                  pFile   =   pServer->OpenRequest(CHttpConnection::HTTP_VERB_POST,"/NULL/NULL/NULL/NULL/NULL/SignIn.gen",NULL,1,NULL,NULL,INTERNET_FLAG_EXISTING_CONNECT);  
                  pFile   ->   AddRequestHeaders("Content-Type:   application/x-www-form-urlencoded");  
                  pFile   ->   AddRequestHeaders("Accept:   */*");  
                  pFile   ->   SendRequest(NULL,0,outBuff,strlen(outBuff)+1);  
                  pFile   ->   QueryInfoStatusCode(retcode);  
                  //   you   can   read   from   the   file   after   this......I've   just   left   it   out.  
                  for(int   i=0;i<10;i++)//read   ten   line   of   returned   HTML,you   need   to   edit   this   to   use   the   result  
                  {  
                  CString   smsg;  
                  pFile->ReadString(smsg);  
                  AfxMessageBox(smsg);  
                  }  
  DWORD   dwlen=pFile->GetLength();  
  char   buf[1024];  
  DWORD   dwread=pFile->Read(buf,1024);  
          }  
          catch   (CInternetException   *   e){};  
          delete   pFile;  
          delete   pServer;  
          session.Close();  
  }Top

2 楼microran2000(什么时候才能看到星星?)回复于 2003-09-11 11:07:33 得分 0

#import   "msxml2.dll"  
  using   namespace   msxml2;  
  typedef   struct  
  {    
        BYTE*   lpszResponseHeader;//http应答头  
        DWORD   dwHeadSize;//应答头的长度  
        BYTE*   lpszResponseBody;//应答正文  
        DWORD   dwSize;//应答正文长度  
     
  }   HTTPRequest;  
  //URL请求的Web服务器地址  
  //headers:定制的http协议头  
  //post请求的数据,如果是get请求为NULL  
  //postLength请求的数据长度,如果是get请求为0  
  //HTTPRequest返回应答的内容,参考上面的结构定义  
  返回结构的指针占用的内存,需要调用后手工释放  
  //调用举例:  
   
  int   SendHTTPXML(LPCSTR   URL,LPCSTR   headers,const   BYTE   *Post,   DWORD   postLength,HTTPRequest*   Buffer)  
  { Buffer->dwSize   =0;  
  Buffer->dwHeadSize   =0;  
  Buffer->lpszResponseBody   =NULL;  
  Buffer->lpszResponseHeader   =NULL;  
  try  
  {  
  CoInitialize(NULL);  
  MSXML::IXMLHttpRequestPtr   pXH   =   NULL;  
  HRESULT   hr;  
  if(FAILED(pXH.CreateInstance("Microsoft.XMLHTTP.1")))throw   "Can   not   Create   XMLHTTP   Instance";  
  if(Post!=NULL){  
  hr=pXH->open(_bstr_t("POST"),_bstr_t(URL),CComVariant(VARIANT_FALSE),CComVariant(L""),CComVariant(L""));  
  if(FAILED(hr))throw   "POST   Error";  
  char   *szBufferHeader=(char*)headers;  
  char   *szBufferLN;  
  char   *szComma;  
  char   szHeader[1024];  
  char   szHeaderValue[1024];  
  if(headers!=NULL){  
  while((szBufferLN=stristrA(szBufferHeader,"\r\n"))!=NULL){  
  szComma=stristrA(szBufferHeader,":   ");  
  strncpy(szHeader,szBufferHeader,szComma-szBufferHeader);  
  szHeader[szComma-szBufferHeader]=0;  
  szBufferLN=stristrA(szComma,"\r\n");  
  strncpy(szHeaderValue,szComma+2,szBufferLN-2-szComma);  
  szHeaderValue[szBufferLN-2-szComma]=0;  
  hr=pXH->setRequestHeader(_bstr_t(szHeader),   _bstr_t(szHeaderValue));  
  szBufferHeader=szBufferLN+2;  
  }  
   
  }  
  hr=pXH->send(_variant_t((char*)Post));  
  if(pXH->status   >=200   &&   pXH->status   <400){  
  _bstr_t   bstrResponseHeaders;  
  _bstr_t   bstrResponseText;  
  bstrResponseHeaders=pXH->getAllResponseHeaders();  
  bstrResponseText=pXH->responseText;  
  USES_CONVERSION;  
  int   nLen=bstrResponseHeaders.length();  
  Buffer->lpszResponseHeader   =(BYTE*)   malloc(   nLen+1);  
  ZeroMemory(Buffer->lpszResponseHeader,nLen+1);  
  memcpy(Buffer->lpszResponseHeader,OLE2CT(bstrResponseHeaders),nLen);  
  Buffer->dwHeadSize   =nLen+1;  
   
  nLen=bstrResponseText.length();  
  ZeroMemory(Buffer->lpszResponseBody,nLen+1);  
  Buffer->lpszResponseBody=(BYTE*)malloc(nLen+1);  
  memcpy(Buffer->lpszResponseBody,OLE2CT(bstrResponseText),nLen);  
  Buffer->dwSize=nLen+1;  
  }  
  }  
  else  
  {  
  hr=pXH->open(_bstr_t(L"GET"),_bstr_t(URL),_variant_t(VARIANT_FALSE),_variant_t(L""),_variant_t(L""));  
  if(FAILED(hr))throw   "POST   Error";  
  char   *szBufferHeader=(char*)headers;  
  char   *szBufferLN;  
  char   *szComma;  
  char   szHeader[1024];  
  char   szHeaderValue[1024];  
  if(headers!=NULL){  
  while((szBufferLN=stristrA(szBufferHeader,"\r\n"))!=NULL){  
  szComma=stristrA(szBufferHeader,":   ");  
  strncpy(szHeader,szBufferHeader,szComma-szBufferHeader);  
  szHeader[szComma-szBufferHeader]=0;  
  szBufferLN=stristrA(szComma,"\r\n");  
  strncpy(szHeaderValue,szComma+2,szBufferLN-2-szComma);  
  szHeaderValue[szBufferLN-2-szComma]=0;  
  hr=pXH->setRequestHeader(_bstr_t(szHeader),   _bstr_t(szHeaderValue));  
  szBufferHeader=szBufferLN+2;  
  }  
   
  }  
  hr=pXH->send();  
  if(pXH->status   >=200   &&   pXH->status   <400){  
  _bstr_t   bstrResponseHeaders;  
  _bstr_t   bstrResponseText;  
  bstrResponseHeaders=pXH->getAllResponseHeaders();  
  bstrResponseText=pXH->responseText;  
  USES_CONVERSION;  
  int   nLen=lstrlen(OLE2CT(bstrResponseHeaders));  
  Buffer->lpszResponseHeader   =(BYTE*)   malloc(   nLen+1);  
  ZeroMemory(Buffer->lpszResponseHeader,nLen+1);  
  memcpy(Buffer->lpszResponseHeader,OLE2CT(bstrResponseHeaders),nLen);  
  Buffer->dwHeadSize   =nLen+1;  
   
  nLen=lstrlen(OLE2CT(bstrResponseText));  
  Buffer->lpszResponseBody   =(BYTE*)   malloc(   nLen+1);  
  ZeroMemory(Buffer->lpszResponseBody,nLen+1);  
  Buffer->lpszResponseBody=(BYTE*)malloc(nLen+1);  
  memcpy(Buffer->lpszResponseBody,OLE2CT(bstrResponseText),nLen);  
   
  Buffer->dwSize=nLen+1;  
  while(Buffer->lpszResponseBody[nLen-1]!='>')nLen--;  
  Buffer->lpszResponseBody[nLen]=0;  
  }  
  }  
  }  
  catch(...)  
  {//exception   handling  
  if(Buffer->lpszResponseBody!=NULL)free(Buffer->lpszResponseBody);  
  if(Buffer->lpszResponseHeader!=NULL)free(Buffer->lpszResponseHeader);  
  CoUninitialize();  
  return   1;  
  }  
           
  CoUninitialize();  
   
  return   0;  
  }Top

相关问题

  • 紧急,希望各位帮个忙!!!!!!
  • 紧急求救,望各位相助,先谢过了。
  • 紧急求救:在线急等!!!!希望各位高手指点.
  • 一个关于CheckBox的紧急问题,望各位帮忙?
  • 各位紧急求救!!!!!!!!!!!!!!!!!!1
  • 各位紧急情况!!!!!!!!!!!
  • 紧急求救!很简单的问题,希望各位来看一下!!!!!!!!!!!
  • 关于ATL的一个难题,希望各位高手指教!万分紧急!
  • 500分紧急求助,望各位高手能拔刀相助(算法相关)
  • 500分紧急求助,望各位高手能拔刀相助(算法相关)

关键词

  • web服务器
  • 查询
  • hr
  • 数据
  • lpszresponsebody
  • nlen
  • lpszresponseheader
  • bstrresponsetext
  • pxh
  • buffer

得分解答快速导航

  • 帖主:yuezimmx

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo