C# VC HTTP POST GET)

來源:互聯網
上載者:User

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   )   ;  
  }  
  }  

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.