request.py 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. import requests
  2. import urllib.parse
  3. 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. query = self.site.query.format_query(urllib.parse.quote(keywords))
  17. console.output('Request method: {0}'.format(self.site.query.method), level=console.DBG_INFO)
  18. if self.site.query.method == 'GET':
  19. request = requests.get(
  20. '{0}?{1}'.format(self.site.url, query),
  21. headers=self.headers,
  22. cookies=self.cookie,
  23. allow_redirects=True)
  24. elif self.site.query.method == 'POST':
  25. request = requests.post(
  26. self.site.url,
  27. data=query,
  28. headers=self.headers,
  29. cookies=self.cookie,
  30. allow_redirects=True)
  31. else: # FLAT
  32. request = requests.get(
  33. '{0}/{1}/{2}'.format(self.site.url, self.site.query.path, query),
  34. headers=self.headers,
  35. cookies=self.cookie,
  36. allow_redirects=True)
  37. console.output('Request response: {0} {1}'.format(request.status_code, request.reason), level=console.DBG_INFO)
  38. return self.site.structure.parse(request.text)
  39. def parse_url(self, url):
  40. o = urllib.parse.urlparse(url)
  41. if o.query != '':
  42. o.query = urllib.parse.parse_qs(o.query)
  43. return o
  44. class RawRequest:
  45. @staticmethod
  46. def get(link, parameters=None, headers=None, cookies=None, stream=False):
  47. request = requests.get(
  48. link,
  49. data=parameters,
  50. headers=headers,
  51. cookies=cookies,
  52. allow_redirects=True,
  53. stream=stream)
  54. if request.status_code == 200:
  55. return request
  56. @staticmethod
  57. def post(link, parameters=None, headers=None, cookies=None, stream=False):
  58. request = requests.post(
  59. link,
  60. data=parameters,
  61. headers=headers,
  62. cookies=cookies,
  63. allow_redirects=True,
  64. stream=stream)
  65. if request.status_code == 200:
  66. return request