пятница, 6 января 2012 г.

C# Передаем и получаем данные с помощью HttpWebReques, HttpWebResponse


Так як розповідати я не вмію, то відразу вивішую код з коментами ( з них думаю і так все зрозуміло).

  /// <summary>  
 /// Класс для отправки запросов 
  /// </summary>   
 class HttpRequest   {    
  private string URI = String.Empty;  
   private string _method = "POST"; 
   /// <summary>     /// Дефолтный конструктор     /// </summary>     private HttpRequest()     { }   
  /// <summary>     /// Конструктор     /// </summary>     /// <param name="uri">Ссылка для работы с веб-интерфесом</param>     public HttpRequest(string uri)  
           {     
         this.URI = uri;
       }   
   /// <summary>     /// Конструктор     /// </summary>     /// <param name="uri">ССылка для работы с веб интерфесом</param>     /// <param name="method">метод (POST или GET)</param>  
   public HttpRequest(string uri, string method)  
    {       this.URI = uri;    
    this._method = method;     }    
   /// <summary>     /// Шлем запрос в виде xml     /// </summary>     /// <param name="doc">ответ веб-интерфейса</param>     /// <returns></returns>   
   public XmlDocument SendRequest(XmlDocument doc)
     {       HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(this.URI);  
      // Разрешаем авторедирект       httpWebRequest.AllowAutoRedirect = true;  
      // Создаем для запроса новый контейнер для хранения сессий       httpWebRequest.CookieContainer = new CookieContainer();   
     // Следующие строки итак понятны    
    httpWebRequest.Method = this._method;       httpWebRequest.ContentType = "application/x-www-form-urlencoded";       byte[] ByteQuery = System.Text.Encoding.ASCII.GetBytes(doc.OuterXml);      
 // Длинна запроса (обязательный параметр)    
 httpWebRequest.ContentLength = ByteQuery.Length;
       // Открываем поток для записи     
   Stream QueryStream = httpWebRequest.GetRequestStream();  
      // Записываем в поток (это и есть POST запрос)       QueryStream.Write(ByteQuery, 0, ByteQuery.Length);    
    // Закрываем поток       QueryStream.Close();     
   // Объект с ответом сервера       HttpWebResponse httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse();     
   // Присваиваем сессию     
  httpWebResponse.Cookies = httpWebRequest.CookieContainer.GetCookies(httpWebRequest.RequestUri);       // Открываем поток для чтения   
     Stream stream = httpWebResponse.GetResponseStream();
       // Читаем из потока   
     StreamReader reader = new StreamReader(stream);  
      // Возвращаем результат запроса   
     XmlDocument document = new XmlDocument();       document.LoadXml(reader.ReadToEnd());    
     return document;  
    }   
  } * This source code was highlighted with Source Code Highlighter.

И еще один способ

        /// <summary>
        /// Посылает GET-запрос сервису и возвращает ответ в виде Xml документа.
        /// </summary>


 public XmlDocument SendRequest(string url)
        {
            XmlDocument xml = null;
            MemoryStream stream = null;
            WebClient client = null;
            try
            {
                client = new WebClient();               
                byte[] respBytes = client.DownloadData(url);
                stream = new MemoryStream(respBytes);
                xml = new XmlDocument();
                xml.Load(stream);
            }
            catch
            {
                throw new Exception("Ошибка при подключении!");
            }
            finally
            {
                if (stream != null)
                {
                    stream.Dispose();
                }

                if (client != null)
                {
                    client.Dispose();
                }
            }

            return xml;
        }