shell.py 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. # -*- coding: utf-8 -*-
  2. """
  3. Created on 2020/5/9 12:37 AM
  4. ---------
  5. @summary:
  6. ---------
  7. @author: Boris
  8. @email: boris_liu@foxmail.com
  9. """
  10. import json
  11. import re
  12. import sys
  13. import IPython
  14. from feapder import Request
  15. def request(**kwargs):
  16. kwargs.setdefault("proxies", None)
  17. response = Request(**kwargs).get_response()
  18. print(response)
  19. IPython.embed(header="now you can use response")
  20. def fetch_url(url):
  21. request(url=url)
  22. def fetch_curl(curl_args):
  23. """
  24. 解析及抓取curl请求
  25. :param curl_args:
  26. [url, '-H', 'xxx', '-H', 'xxx', '--data-binary', '{"xxx":"xxx"}', '--compressed']
  27. :return:
  28. """
  29. url = curl_args[0]
  30. curl_args.pop(0)
  31. headers = {}
  32. data = {}
  33. for i in range(0, len(curl_args), 2):
  34. if curl_args[i] == "-H":
  35. regex = "([^:\s]*)[:|\s]*(.*)"
  36. result = re.search(regex, curl_args[i + 1], re.S).groups()
  37. if result[0] in headers:
  38. headers[result[0]] = headers[result[0]] + "&" + result[1]
  39. else:
  40. headers[result[0]] = result[1].strip()
  41. elif curl_args[i] == "--data-binary":
  42. data = json.loads(curl_args[i + 1])
  43. request(url=url, data=data, headers=headers)
  44. def usage():
  45. """
  46. 下载调试器
  47. usage: feapder shell [options] [args]
  48. optional arguments:
  49. -u, --url 抓取指定url
  50. -c, --curl 抓取curl格式的请求
  51. """
  52. print(usage.__doc__)
  53. sys.exit()
  54. def main():
  55. args = sys.argv
  56. if len(args) < 3:
  57. usage()
  58. elif args[1] in ("-h", "--help"):
  59. usage()
  60. elif args[1] in ("-u", "--url"):
  61. fetch_url(args[2])
  62. elif args[1] in ("-c", "--curl"):
  63. fetch_curl(args[2:])
  64. else:
  65. usage()
  66. if __name__ == "__main__":
  67. main()