requests.py 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. import _requests
  2. class Response(_requests.Response):
  3. def __init__(self):
  4. super().__init__()
  5. def _append_params_to_url(rqst: Response, url: str, params: dict) -> int:
  6. if params is None:
  7. ret = rqst.urlencode_write(url, '', '', '')
  8. return 1
  9. if '?' in url:
  10. first_connect = '&'
  11. else:
  12. first_connect = '?'
  13. # 初始化连接url
  14. ret = rqst.urlencode_write(url, '', '', '')
  15. if ret != 1:
  16. return ret
  17. count = 0
  18. connect = '='
  19. start = '&'
  20. for k, v in params.items():
  21. if count == 0:
  22. ret = rqst.urlencode_write(str(k), str(v), first_connect, connect)
  23. if ret != 1:
  24. return ret
  25. count += 1
  26. else:
  27. ret = rqst.urlencode_write(str(k), str(v), start, connect)
  28. if ret != 1:
  29. return ret
  30. return 1
  31. def _append_headers(rqst: Response, headers: dict) -> int:
  32. if headers is None:
  33. return 1
  34. for k, v in headers.items():
  35. # print("\nheaders:", str(k), "=", str(v),"\n")
  36. ret = rqst.header_write(str(k), str(v))
  37. if ret != 1:
  38. return ret
  39. return 1
  40. def request(
  41. method: str,
  42. url: str,
  43. params=None,
  44. headers=None,
  45. timeout=0.0,
  46. files=None,
  47. json=None,
  48. data=None) -> Response:
  49. if files != None:
  50. print("files is not supported")
  51. return None
  52. if json != None:
  53. print("json is not supported")
  54. return None
  55. """
  56. 初始化请求对象,分配内存和固定请求头
  57. """
  58. rqst = Response()
  59. rqst.url = url
  60. # 初始化,分配内存, 写入方法POST/GET
  61. ret = rqst.request_init(method)
  62. if ret != 1:
  63. return None
  64. # 写入URL
  65. ret = _append_params_to_url(rqst, url, params)
  66. if ret != 1:
  67. # 出现错误,需要释放对象
  68. return None
  69. # 写入默认HTTP版本号
  70. ret = rqst.proto_write('')
  71. if ret != 1:
  72. return None
  73. # 写入响应头数据
  74. ret = _append_headers(rqst, headers)
  75. if ret != 1:
  76. return None
  77. ret = rqst.request(method, rqst.url, timeout, data)
  78. if ret != 1:
  79. return None
  80. return rqst
  81. def get(url: str, params=None) -> Response:
  82. return request('GET', url, params)