2013-01-17 23 views
1

我正在創建一個使用套接字與其他手機通信的Windows手機應用程序。 要通過套接字發送數據,我正在使用Http協議。 現在我正在手動創建http請求(附加字符串)。 我可以使用C#類來形成Http請求並通過套接字發送數據嗎?我可以使用C#Http類爲我的應用程序形成Http請求嗎?

而且我也可以使用C#類來解析從其他移動設備通過套接字獲取的http數據。

回答

3
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Net; 
using System.IO; 

namespace WebserverInteractionClassLibrary 
{ 
    public class RequestManager 
    { 
     public string LastResponse { protected set; get; } 

     CookieContainer cookies = new CookieContainer(); 

     internal string GetCookieValue(Uri SiteUri,string name) 
     { 
      Cookie cookie = cookies.GetCookies(SiteUri)[name]; 
      return (cookie == null) ? null : cookie.Value; 
     } 

     public string GetResponseContent(HttpWebResponse response) 
     { 
      if (response == null) 
      { 
       throw new ArgumentNullException("response"); 
      } 
      Stream dataStream = null; 
      StreamReader reader = null; 
      string responseFromServer = null; 

      try 
      { 
       // Get the stream containing content returned by the server. 
       dataStream = response.GetResponseStream(); 
       // Open the stream using a StreamReader for easy access. 
       reader = new StreamReader(dataStream); 
       // Read the content. 
       responseFromServer = reader.ReadToEnd(); 
       // Cleanup the streams and the response. 
      } 
      catch (Exception ex) 
      { 
       Console.WriteLine(ex.Message); 
      } 
      finally 
      {     
       if (reader != null) 
       { 
        reader.Close(); 
       } 
       if (dataStream != null) 
       { 
        dataStream.Close(); 
       } 
       response.Close(); 
      } 
      LastResponse = responseFromServer; 
      return responseFromServer; 
     } 

     public HttpWebResponse SendPOSTRequest(string uri, string content, string login, string password, bool allowAutoRedirect) 
     { 
      HttpWebRequest request = GeneratePOSTRequest(uri, content, login, password, allowAutoRedirect); 
      return GetResponse(request); 
     } 

     public HttpWebResponse SendGETRequest(string uri, string login, string password, bool allowAutoRedirect) 
     { 
      HttpWebRequest request = GenerateGETRequest(uri, login, password, allowAutoRedirect); 
      return GetResponse(request); 
     } 

     public HttpWebResponse SendRequest(string uri, string content, string method, string login, string password, bool allowAutoRedirect) 
     { 
      HttpWebRequest request = GenerateRequest(uri, content, method, login, password, allowAutoRedirect); 
      return GetResponse(request); 
     } 

     public HttpWebRequest GenerateGETRequest(string uri, string login, string password, bool allowAutoRedirect) 
     { 
      return GenerateRequest(uri, null, "GET", null, null, allowAutoRedirect); 
     } 

     public HttpWebRequest GeneratePOSTRequest(string uri, string content, string login, string password, bool allowAutoRedirect) 
     { 
      return GenerateRequest(uri, content, "POST", null, null, allowAutoRedirect); 
     } 

     internal HttpWebRequest GenerateRequest(string uri, string content, string method, string login, string password, bool allowAutoRedirect) 
     { 
      if (uri == null) 
      { 
       throw new ArgumentNullException("uri"); 
      } 
      // Create a request using a URL that can receive a post. 
      HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(uri); 
      // Set the Method property of the request to POST. 
      request.Method = method; 
      // Set cookie container to maintain cookies 
      request.CookieContainer = cookies; 
      request.AllowAutoRedirect = false; 
      // If login is empty use defaul credentials 
      if (string.IsNullOrEmpty(login)) 
      { 
       request.Credentials = CredentialCache.DefaultNetworkCredentials; 
      } 
      else 
      { 
       request.Credentials = new NetworkCredential(login, password); 
      } 
      if (method == "POST") 
      { 
       // Convert POST data to a byte array. 
       byte[] byteArray = Encoding.UTF8.GetBytes(content); 
       // Set the ContentType property of the WebRequest. 
       request.ContentType = "application/x-www-form-urlencoded"; 
       // Set the ContentLength property of the WebRequest. 
       request.ContentLength = byteArray.Length; 
       // Get the request stream. 
       Stream dataStream = request.GetRequestStream(); 
       // Write the data to the request stream. 
       dataStream.Write(byteArray, 0, byteArray.Length); 
       // Close the Stream object. 
       dataStream.Close(); 
      } 
      return request; 
     } 

     internal HttpWebResponse GetResponse(HttpWebRequest request) 
     { 
      if (request == null) 
      { 
       throw new ArgumentNullException("request"); 
      } 
      HttpWebResponse response = null; 
      try 
      { 
       response = (HttpWebResponse)request.GetResponse();     
       cookies.Add(response.Cookies);     
       // Print the properties of each cookie. 
       Console.WriteLine("\nCookies: "); 
       foreach (Cookie cook in cookies.GetCookies(request.RequestUri)) 
       { 
        Console.WriteLine("Domain: {0}, String: {1}", cook.Domain, cook.ToString()); 
       } 
      } 
      catch (WebException ex) 
      { 
       Console.WriteLine("Web exception occurred. Status code: {0}", ex.Status); 
      } 
      catch (Exception ex) 
      { 
       Console.WriteLine(ex.Message); 
      } 
      return response; 
     } 

    } 
} 

這裏是一個很好的代碼片段,可以作爲例子使用來自this question

+0

我仍然懷疑......我給字節數組插入發送。我將在哪裏獲得你創建的請求的字節數組。 – vijay053

+0

對於請求或響應?! –

+0

對於請求和響應。 – vijay053

相關問題