requests.py 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  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 is not None:
  50. print("files is not supported")
  51. return None
  52. if json is not 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. # print("Request init ret: " + str(ret))
  63. if ret != 1:
  64. print("Failed to initialize the request object.")
  65. return None
  66. # 写入URL
  67. ret = _append_params_to_url(rqst, url, params)
  68. # print("Append params to URL ret: " + str(ret))
  69. if ret != 1:
  70. # 出现错误,需要释放对象
  71. print("Error appending params to the URL.")
  72. return None
  73. # 写入默认HTTP版本号
  74. ret = rqst.proto_write('')
  75. # print("Write HTTP version ret: " + str(ret))
  76. if ret != 1:
  77. print("Error writing HTTP version.")
  78. return None
  79. # 写入响应头数据
  80. ret = _append_headers(rqst, headers)
  81. # print("Append headers ret: " + str(ret))
  82. if ret != 1:
  83. print("Error appending headers to the request.")
  84. return None
  85. ret = rqst.request(method, rqst.url, timeout, data)
  86. # print("Request ret: " + str(ret))
  87. if ret != 1:
  88. print("Request failed with response code: " + str(ret))
  89. return None
  90. return rqst
  91. def get(url: str, params=None) -> Response:
  92. return request('GET', url, params)