Requester.cs 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. using Rac.Models;
  2. using System.Net;
  3. namespace Rac.Tools
  4. {
  5. // This class can change to instance class
  6. // Implement different driver (WebRequest/WinNet/Sock/Etc(Pr0xy))
  7. internal static class Requester
  8. {
  9. public static Response GetHttp(string url)
  10. {
  11. var req = WebRequest.CreateHttp(url);
  12. req.UserAgent = "RawArchiveCrawler";
  13. req.AllowAutoRedirect = false; //record redirections
  14. try
  15. {
  16. var resp = (HttpWebResponse)req.GetResponse();
  17. return new Response
  18. {
  19. StatusCode = resp.StatusCode,
  20. StatusDescription = resp.StatusDescription,
  21. Headers = resp.Headers,
  22. Body = resp.GetResponseStream().ToBytes()
  23. };
  24. }
  25. catch (WebException e)
  26. {
  27. if (e.Status != WebExceptionStatus.ProtocolError) throw;
  28. var resp = (HttpWebResponse)e.Response;
  29. return new Response
  30. {
  31. StatusCode = resp.StatusCode,
  32. StatusDescription = resp.StatusDescription,
  33. Headers = resp.Headers,
  34. Body = resp.GetResponseStream().ToBytes()
  35. };
  36. }
  37. }
  38. }
  39. }