request.py 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. import requests
  2. import urllib.parse
  3. from helper import console
  4. class Request:
  5. def __init__(self, site):
  6. self.site = site
  7. self.headers = {}
  8. self.cookie = {}
  9. def add_header(self, key, value):
  10. self.headers[key] = value
  11. return self
  12. def add_cookie(self, key, value):
  13. self.cookie[key] = value
  14. return self
  15. def search(self, keywords):
  16. if self.site.query.encoding == '+':
  17. query = self.site.query.format_query(urllib.parse.quote(keywords.replace(' ', '+')))
  18. else:
  19. query = self.site.query.format_query(urllib.parse.quote(keywords))
  20. console.output('Request method: {0}'.format(self.site.query.method), level=console.DBG_INFO)
  21. if self.site.query.method == 'GET':
  22. request = requests.get(
  23. '{0}?{1}'.format(self.site.query.url_path, query),
  24. headers=self.headers,
  25. cookies=self.cookie,
  26. allow_redirects=True)
  27. elif self.site.query.method == 'POST':
  28. request = requests.post(
  29. self.site.query.url_path,
  30. data=query,
  31. headers=self.headers,
  32. cookies=self.cookie,
  33. allow_redirects=True)
  34. else: # FLAT
  35. request = requests.get(
  36. '{0}/{1}'.format(self.site.query.url_path, query),
  37. headers=self.headers,
  38. cookies=self.cookie,
  39. allow_redirects=True)
  40. console.output('Request response: {0} {1}'.format(request.status_code, request.reason), level=console.DBG_INFO)
  41. return self.site.structure.parse(request.text)
  42. def parse_url(self, url):
  43. o = urllib.parse.urlparse(url)
  44. if o.query != '':
  45. o.query = urllib.parse.parse_qs(o.query)
  46. return o
  47. class RawRequest:
  48. @staticmethod
  49. def get(link, parameters=None, headers=None, cookies=None, stream=False):
  50. request = requests.get(
  51. link,
  52. data=parameters,
  53. headers=headers,
  54. cookies=cookies,
  55. allow_redirects=True,
  56. stream=stream)
  57. if request.status_code == 200:
  58. return request
  59. @staticmethod
  60. def post(link, parameters=None, headers=None, cookies=None, stream=False):
  61. request = requests.post(
  62. link,
  63. data=parameters,
  64. headers=headers,
  65. cookies=cookies,
  66. allow_redirects=True,
  67. stream=stream)
  68. if request.status_code == 200:
  69. return request