zoukankan      html  css  js  c++  java
  • 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   )   ;  
      }  
      }  

  • 相关阅读:
    1442. Count Triplets That Can Form Two Arrays of Equal XOR
    1441. Build an Array With Stack Operations
    312. Burst Balloons
    367. Valid Perfect Square
    307. Range Sum Query
    1232. Check If It Is a Straight Line
    993. Cousins in Binary Tree
    1436. Destination City
    476. Number Complement
    383. Ransom Note
  • 原文地址:https://www.cnblogs.com/guanjie20/p/1657974.html
Copyright © 2011-2022 走看看