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

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

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

Приветствую! Вопрос в большей степени для тех, кто использовал эту либу. Сразу скажу, что да, можно стандартными шарповскими классами без доп либ написать это (Уже делал, но не выходит с поддержкой Socks4/5). Но ведь в либе есть туча готовых методов, что значительно сокращает затраты времени. Да и проблема, возникающая у меня не из сложных думаю, однако никак не могу найти решение. Сделал свой метод упрощающий использование запросов:
Листинг программы
  1. private HttpResponse GetRequest(string URL, MyProxy p, CookieDictionary cook, string UserAgent = null, RequestParams urlParams = null, bool FollowRedirects = false, List<MyHeader> headers = null)
  2. {
  3. try
  4. {
  5. HttpResponse response;
  6. //response.
  7. string Content;
  8. using (var request = new HttpRequest())
  9. {
  10. switch (p.myProxyType)
  11. {
  12. case MyProxy.ProxyTypes.HTTP: request.Proxy = HttpProxyClient.Parse(p.adress_port); break;
  13. case MyProxy.ProxyTypes.Socks4: request.Proxy = Socks4ProxyClient.Parse(p.adress_port); break;
  14. case MyProxy.ProxyTypes.Socks5: request.Proxy = Socks5ProxyClient.Parse(p.adress_port); break;
  15. }
  16. //receive headers
  17. foreach (MyHeader header in headers)
  18. request.AddHeader(header.str_0, header.str_1);
  19. request.AllowAutoRedirect = false;
  20. request.UserAgent = UserAgent;
  21. request.Cookies = cook;
  22. response = request.Get(URL, urlParams);
  23. log(response.ToString());
  24. ////// Т.к при использовании request.AllowAutoRedirect по каким-то причинам не возвращается вообще ничего в response, то делаем так:
  25. if (FollowRedirects == true & response.HasRedirect)
  26. {
  27. while (response.HasRedirect)
  28. { response = request.Get(response.RedirectAddress, urlParams); }
  29. }
  30. Content = response.ToString();
  31. log(Content);
  32. }
  33. return response;
  34. }
  35. catch (HttpException ex)
  36. {
  37. log2("Произошла ошибка при работе с HTTP-сервером:" + ex.Message);
  38. switch (ex.Status)
  39. {
  40. case HttpExceptionStatus.Other:
  41. log2("Proxy:" + p.ToString() + " Неизвестная ошибка");
  42. break;
  43. case HttpExceptionStatus.ProtocolError:
  44. log2("Код состояния: {0}" + ex.HttpStatusCode);
  45. break;
  46. case HttpExceptionStatus.ConnectFailure:
  47. log2("Не удалось соединиться с HTTP-сервером.");
  48. break;
  49. case HttpExceptionStatus.SendFailure:
  50. log2("Не удалось отправить запрос HTTP-серверу.");
  51. break;
  52. case HttpExceptionStatus.ReceiveFailure:
  53. log2("Не удалось загрузить ответ от HTTP-сервера.");
  54. break;
  55. }
  56. return null;
  57. }
  58. }
использование:
Листинг программы
  1. private void method1()
  2. {
  3. CookieDictionary cook = new CookieDictionary();
  4. MyProxy p = new MyProxy("127.0.0.1:8888", MyProxy.ProxyTypes.HTTP);
  5. List<MyHeader> headers = new List<MyHeader>();
  6. HttpResponse Req1 = GetRequest("http://google.com", p, cook, User_Agent, headers: headers);
  7. log(Req1.ToString());
  8. log(Req1.Location);
  9. log(Req1.StatusCode.ToString());
  10. }
Так вот, вопрос. в метод

private void method1()

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

Req1.ToString()

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

private string GetRequest()

и соответственно тогда я не могу пользоваться всем возможностями класса HttpResponse. Так же пробовал возвращать Stream в method1() и получать text таким образом, но так же не работает
Листинг программы
  1. private string response_GetString(HttpResponse response)
  2. {
  3. Stream responseStream = responseStream = response.ToStream();
  4. //if (response.ContentEncoding.ToLower().Contains("gzip"))
  5. // responseStream = new System.IO.Compression.GZipStream(responseStream, System.IO.Compression.CompressionMode.Decompress);
  6. //else if (response.ContentEncoding.ToLower().Contains("deflate"))
  7. // responseStream = new System.IO.Compression.DeflateStream(responseStream, System.IO.Compression.CompressionMode.Decompress);
  8.  
  9. StreamReader reader = new StreamReader(responseStream, Encoding.GetEncoding("UTF-8"));
  10. string resp = reader.ReadToEnd();
  11. return resp;
  12. }
Может кто помочь? цель - получить Req1.ToString(); в method1()

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

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

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


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

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

11   голосов , оценка 4.091 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы