XNet HttpResponse .ToString() Получание Text ответа сервера - C#

Узнай цену своей работы

Формулировка задачи:

Приветствую! Вопрос в большей степени для тех, кто использовал эту либу. Сразу скажу, что да, можно стандартными шарповскими классами без доп либ написать это (Уже делал, но не выходит с поддержкой Socks4/5). Но ведь в либе есть туча готовых методов, что значительно сокращает затраты времени. Да и проблема, возникающая у меня не из сложных думаю, однако никак не могу найти решение. Сделал свой метод упрощающий использование запросов:
        private HttpResponse GetRequest(string URL, MyProxy p, CookieDictionary cook, string UserAgent = null, RequestParams urlParams = null, bool FollowRedirects = false, List<MyHeader> headers = null)
        {
 
            try
            {
                HttpResponse response;
                //response.
                string Content;
                using (var request = new HttpRequest())
                {
                    switch (p.myProxyType)
                    {
                        case MyProxy.ProxyTypes.HTTP: request.Proxy = HttpProxyClient.Parse(p.adress_port); break;
                        case MyProxy.ProxyTypes.Socks4: request.Proxy = Socks4ProxyClient.Parse(p.adress_port); break;
                        case MyProxy.ProxyTypes.Socks5: request.Proxy = Socks5ProxyClient.Parse(p.adress_port); break;
                    }
 
                    //receive headers
                    foreach (MyHeader header in headers)
                        request.AddHeader(header.str_0, header.str_1);
 
                    request.AllowAutoRedirect = false;
                    request.UserAgent = UserAgent;
                    request.Cookies = cook;
 
                    response = request.Get(URL, urlParams);
 
                    log(response.ToString());
 
                    ////// Т.к при использовании request.AllowAutoRedirect по каким-то причинам не возвращается вообще ничего в response, то делаем так:
                    if (FollowRedirects == true & response.HasRedirect)
                    {
                        while (response.HasRedirect)
                        { response = request.Get(response.RedirectAddress, urlParams); }
                    }
 
                    Content = response.ToString();
                    log(Content);
                }
                return response;
 
            }
            catch (HttpException ex)
            {
                log2("Произошла ошибка при работе с HTTP-сервером:" + ex.Message);
 
                switch (ex.Status)
                {
                    case HttpExceptionStatus.Other:
                        log2("Proxy:" + p.ToString() + " Неизвестная ошибка");
                        break;
 
                    case HttpExceptionStatus.ProtocolError:
                        log2("Код состояния: {0}" + ex.HttpStatusCode);
                        break;
 
                    case HttpExceptionStatus.ConnectFailure:
                        log2("Не удалось соединиться с HTTP-сервером.");
                        break;
 
                    case HttpExceptionStatus.SendFailure:
                        log2("Не удалось отправить запрос HTTP-серверу.");
                        break;
 
                    case HttpExceptionStatus.ReceiveFailure:
                        log2("Не удалось загрузить ответ от HTTP-сервера.");
                        break;
                }
                return null;
            }
 
        }
использование:
private void method1()
{
   CookieDictionary cook = new CookieDictionary();
   MyProxy p = new MyProxy("127.0.0.1:8888", MyProxy.ProxyTypes.HTTP);            
   List<MyHeader> headers = new List<MyHeader>();
   HttpResponse Req1 = GetRequest("http://google.com", p, cook, User_Agent, headers: headers);
 
   log(Req1.ToString());
   log(Req1.Location);
   log(Req1.StatusCode.ToString());
}
Так вот, вопрос. в метод

private void method1()

не передается содержимое

Req1.ToString()

, ну никак. В примере, показанном выше в лог выведутся Req1.Location, Req1.StatusCode.ToString(), но не Req1.ToString(). Однако если вызвать log(Req1.ToString()); напрямую в
private HttpResponse GetRequest()
- все нормально. Text ответ от сервера выводится. Так же если возвращать методом private HttpResponse GetRequest() значниe string - работает, но тогда надо делать метод

private string GetRequest()

и соответственно тогда я не могу пользоваться всем возможностями класса HttpResponse. Так же пробовал возвращать Stream в method1() и получать text таким образом, но так же не работает
        private string response_GetString(HttpResponse response)
        {
                Stream responseStream = responseStream = response.ToStream();
                //if (response.ContentEncoding.ToLower().Contains("gzip"))
                //    responseStream = new System.IO.Compression.GZipStream(responseStream, System.IO.Compression.CompressionMode.Decompress);
                //else if (response.ContentEncoding.ToLower().Contains("deflate"))
                //    responseStream = new System.IO.Compression.DeflateStream(responseStream, System.IO.Compression.CompressionMode.Decompress);

                StreamReader reader = new StreamReader(responseStream, Encoding.GetEncoding("UTF-8"));
                string resp = reader.ReadToEnd();
                return resp;
        }
Может кто помочь? цель - получить Req1.ToString(); в method1()

Решение задачи: «XNet HttpResponse .ToString() Получание Text ответа сервера»

textual
Листинг программы
private void method1()

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 4.091 из 5
Похожие ответы