Requester.cs 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  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, string referer = null)
  10. {
  11. var req = WebRequest.CreateHttp(url);
  12. req.UserAgent = "RawArchiveCrawler";
  13. if (referer != null) req.Referer = referer;
  14. req.AllowAutoRedirect = false; //record redirections
  15. try
  16. {
  17. var resp = (HttpWebResponse)req.GetResponse();
  18. return new Response
  19. {
  20. StatusCode = resp.StatusCode,
  21. StatusDescription = resp.StatusDescription,
  22. Headers = resp.Headers,
  23. Body = resp.GetResponseStream().ToBytes()
  24. };
  25. }
  26. catch (WebException e)
  27. {
  28. if (e.Status != WebExceptionStatus.ProtocolError) throw;
  29. var resp = (HttpWebResponse)e.Response;
  30. return new Response
  31. {
  32. StatusCode = resp.StatusCode,
  33. StatusDescription = resp.StatusDescription,
  34. Headers = resp.Headers,
  35. Body = resp.GetResponseStream().ToBytes()
  36. };
  37. }
  38. }
  39. }
  40. }