def _prepare_body(self, data, files=None): """创建post需要的body数据 :param data: post 参数 :type data: dict(post_param=value) :param: files: post 文件流数据 :type: files: dict(filename=file_object) """ _prepare = PreparedRequest() _prepare.headers = {} _prepare.prepare_body(data=data, files=files) data.update(files) return urlencode(data)
def test_request_context( self, path: str = '/', method: str = 'GET', *, scheme: str = 'http', headers: Union[dict, CIMultiDict] = None, data: Union[AnyStr, dict] = None) -> RequestContext: headers, path, query_string = make_test_headers_path_and_query_string( self, path, headers=headers) if headers and headers.get('Content-Type', None) == 'application/json': body_data = dumps(data).encode() if data else b'' elif data: if isinstance(data, str): headers.setdefault('Content-Type', 'application/x-www-form-urlencoded') body_data = data.encode() else: form = {} files = {} for key, value in data.items(): if isinstance(value, (list, tuple)): files[key] = value else: form[key] = value prep = PreparedRequest() prep.headers = {} prep.prepare_body(data=form or None, files=files) body_data = prep.body headers.update(prep.headers) else: body_data = b'' request = self.request_class(method, scheme, path, query_string, headers) request.body.set_result(body_data) return self.request_context(request)
import tornado import tornado.httpclient as httpclient asyncHTTPClient = httpclient.AsyncHTTPClient() c = 0 file = 'test.jpg' files = [ ('image', ('%d' % c, open(file, 'rb'), 'image/jpg')), ] data = { 'filename': 'test', } def on_response(response): pass if __name__ == "__main__": IP = '106.14.70.249' url = 'http://%s:9331/api/image_save' % IP prepared_request = PreparedRequest() prepared_request.method = 'post' prepared_request.headers = {} prepared_request.prepare_body(data, files) request = tornado.httpclient.HTTPRequest(url=url, headers=prepared_request.headers, method='POST', body=prepared_request.body) asyncHTTPClient.fetch(request, on_response) tornado.ioloop.IOLoop.instance().start() # start the tornado ioloop to