• C# VC HTTP POST GET(转)


    C# VC HTTP POST GET

    post 提交用户输入的方式是隐含提交,在ASP端用request.getform()来获取输入域的值;
    get 提交用户输入的方式是显式提交,提交时在浏览器的地址栏里可以看见用户输入的内容(你在Google中输入Java搜索,你按查找后可以在地址栏里看到java),在ASP端用request.getquery()来获取输入域的值;

    SUMMARY
        To properly simulate a Form submission using WinInet, you need to send a header that indicates the proper Content-Type. For Forms, the proper Content-Type header is: Content-Type: application/x-www-form-urlencoded

     摘要:

         为了通过WinInet模拟一个表单,你需要发送一个header,来指示 Content-Type的内容。一般就是:Content-Type: application/x-www-form-urlencoded 
         
        MORE INFORMATION
        In many cases, the server does not respond appropriately if a Content-Type is not specified. For example, the Active Server Pages component of IIS 3.0 actually checks this header specifically for 'application/x-www-form- urlencoded' before adding form variables to the "Request.Form" object. This MIME/Content-Type indicates that the data of the request is a list of URL- encoded form variables. URL-encoding means that space character (ASCII 32) is encoded as '+', special character such '!' encoded in hexadecemal form as '%21'.

    了解更多:

          在许多情况下,如果Content-Type 未指定的话,服务器的返回可能就不对。比如说:IIS 3.0的ASP组件会在给"Request.Form" 对象加入变量前,检查header 是否是 'application/x-www-form- urlencoded' 。MIME/Content-Type 表明请求的数据是一个URL- encoded的数组变量。URL-encoding 意味着空格 (ASCII 32) 被 '+'替换,特殊字符都被用相应的十六进制形式替换了,比如 '!'->'%21'。
         
        Here is a snippet of code that uses the MFC WinInet classes to simulate a Form POST request:

    下面是一段用MFC 的WinInet 类来模拟表单提交的代码:


         CString strHeaders =
         _T("Content-Type: application/x-www-form-urlencoded");
         // URL-encoded form variables -
         // name = "John Doe", userid = "hithere", other = "P&Q"
         CString strFormData = _T("name=John+Doe&userid=hithere&other=P%26Q");
        
         CInternetSession session;
         CHttpConnection* pConnection =
         session.GetHttpConnection(_T("ServerNameHere"));
         CHttpFile* pFile =
         pConnection->OpenRequest(CHttpConnection::HTTP_VERB_POST,
         _T("FormActionHere"));
         BOOL result = pFile->SendRequest(strHeaders,
         (LPVOID)(LPCTSTR)strFormData, strFormData.GetLength());
        
         不用 MFC,用SDK实现以上的功能:
        Without MFC, the same code translates to straight SDK calls as follows:


         static TCHAR hdrs[] =
         _T("Content-Type: application/x-www-form-urlencoded");
         static TCHAR frmdata[] =
         _T("name=John+Doe&userid=hithere&other=P%26Q");
         statuc TCHAR accept[] =
         _T("Accept: */*");
        
         // for clarity, error-checking has been removed
         HINTERNET hSession = InternetOpen("MyAgent",
         INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
         HINTERNET hConnect = InternetConnect(hSession, _T("ServerNameHere"),
         INTERNET_DEFAULT_HTTP_PORT, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 1);
         HINTERNET hRequest = HttpOpenRequest(hConnect, "POST",
         _T("FormActionHere"), NULL, NULL, accept, 0, 1);
         HttpSendRequest(hRequest, hdrs, strlen(hdrs), frmdata, strlen(frmdata));
         // close any valid internet-handles


              用C#实现:

               //把sXmlMessage发送到指定的DsmpUrl地址上
                Encoding encode = System.Text.Encoding.GetEncoding("utf-8");
                byte[] arrB = encode.GetBytes(sXmlMessage);
                HttpWebRequest myReq = (HttpWebRequest)WebRequest.Create(DsmpUrl);
                myReq.Method = "POST" ;
                myReq.ContentType = "application/x-www-form-urlencoded";
                myReq.ContentLength = arrB.Length;
                Stream outStream = myReq.GetRequestStream();           
                outStream.Write(arrB,0,arrB.Length);
                outStream.Close();


                //接收HTTP做出的响应
                WebResponse myResp = myReq.GetResponse();
                Stream ReceiveStream = myResp.GetResponseStream();               
                StreamReader readStream = new StreamReader( ReceiveStream, encode );
                Char[] read = new Char[256];
                int count = readStream.Read( read, 0, 256 );
                string str = null;
                while (count > 0)
                {
                    str += new String(read, 0, count);
                    count = readStream.Read(read, 0, 256);
                }
                readStream.Close();
                myResp.Close();

    public   static   string   PostData(   string   str)  
      {   
      try  
      {   
      byte[]   data   =   System.Text.Encoding.GetEncoding   ("GB2312").GetBytes   (   str   )   ;  
      //   准备请求...  
      HttpWebRequest   req   =   (HttpWebRequest)   WebRequest.Create   (   LMMPUrl   )   ;    
      req.Method   =   "Post"   ;  
      req.ContentType   ="application/x-www-form-urlencoded";  
      req.ContentLength   =   data.Length   ;  
      Stream   stream   =   req.GetRequestStream   ()   ;  
      //   发送数据  
      stream.Write   (   data   ,0   ,data.Length   )   ;  
      stream.Close   ()   ;  
       
      HttpWebResponse   rep   =   (HttpWebResponse)req.GetResponse();  
      Stream   receiveStream   =   rep.GetResponseStream();  
      Encoding   encode   =   System.Text.Encoding.GetEncoding("GB2312");  
      //   Pipes   the   stream   to   a   higher   level   stream   reader   with   the   required   encoding   format.    
      StreamReader   readStream   =   new   StreamReader(   receiveStream,   encode   );  
       
      Char[]   read   =   new   Char[256];  
      int   count   =   readStream.Read(   read,   0,   256   );  
      StringBuilder   sb   =   new   StringBuilder   ("")   ;  
      while   (count   >   0)    
      {   
      String   readstr   =   new   String(read,   0,   count);  
      sb.Append   (   readstr   )   ;  
      count   =   readStream.Read(read,   0,   256);  
      }  
       
      rep.Close();  
      readStream.Close();  
       
      return   sb.ToString   ()   ;  
       
      }  
      catch(Exception   ex)  
      {   
      return   ""   ;  
      ForumExceptions.Log   (   ex   )   ;  
      }  
      }  

  • 相关阅读:
    poj1088 经典dp
    poj2301
    poj1050(nyoj104 zoj1074)dp问题
    hdu1003
    poj1001(高精度)
    图的深度优先遍历DFS
    jquery中attr和prop的区别
    Apache 配置域名入口路径
    关于启动定时器和取消定时器的问题
    Web攻防之XSS,CSRF,SQL注入
  • 原文地址:https://www.cnblogs.com/guanjie20/p/1657974.html
Copyright © 2020-2023  润新知