def request_to_curl_string(request): def _escape_apos(string): return string.replace(u"'", u"'\"'\"'") try: request_body = _escape_apos( request.body.decode('ascii')) if request.body else None is_binary_body = False except UnicodeError: request_body = repr(request.body).strip('b') is_binary_body = True curl_headers = HTTPHeaders(request.headers) if request.body and 'Content-Length' not in curl_headers: curl_headers['Content-Length'] = len(request.body) if is_binary_body: curl_echo_data = u"echo -e {} |".format(request_body) curl_data_string = u'--data-binary @-' else: curl_echo_data = '' curl_data_string = u"--data '{}'".format( request_body) if request_body else '' def _format_header(key): header_value = frontik.util.any_to_unicode(curl_headers[key]) return u"-H '{0}: {1}'".format(key, _escape_apos(header_value)) return u"{echo} curl -X {method} '{url}' {headers} {data}".format( echo=curl_echo_data, method=request.method, url=to_unicode(request.url), headers=u' '.join( _format_header(k) for k in sorted(curl_headers.keys())), data=curl_data_string).strip()
def get_headers(headers: HTTPHeaders) -> Mapping[str, List[str]]: """ Tornado's HTTPHeaders contains multiple entries of the same header name if multiple values were used, this function groups headers by header name. See documentation of `tornado.httputil.HTTPHeaders` """ return { header.lower(): headers.get_list(header) for header in headers.keys() }
def request_to_curl_string(request): def _escape_apos(string): return string.replace("'", "'\"'\"'") try: if request.body: request.body.decode('ascii') is_binary_data = False except UnicodeError: is_binary_data = True curl_headers = HTTPHeaders(request.headers) if request.body and 'Content-Length' not in curl_headers: curl_headers['Content-Length'] = len(request.body) if is_binary_data: curl_echo_data = "echo -e {0} |".format(repr(request.body)) curl_data_string = '--data-binary @-' else: curl_echo_data = '' curl_data_string = "--data '{0}'".format(_escape_apos(request.body)) if request.body else '' def _format_header(key): return "-H '{0}: {1}'".format(key, _escape_apos(str(curl_headers[key]))) return "{echo} curl -X {method} '{url}' {headers} {data}".format( echo=curl_echo_data, method=request.method, url=request.url, headers=' '.join(_format_header(k) for k in sorted(curl_headers.keys())), data=curl_data_string ).strip()
def request_to_curl_string(request): def _escape_apos(string): return string.replace("'", "'\"'\"'") try: request_body = _escape_apos(request.body.decode('ascii')) if request.body else None is_binary_body = False except UnicodeError: request_body = repr(request.body).strip('b') is_binary_body = True curl_headers = HTTPHeaders(request.headers) if request.body and 'Content-Length' not in curl_headers: curl_headers['Content-Length'] = len(request.body) if is_binary_body: curl_echo_data = f'echo -e {request_body} |' curl_data_string = '--data-binary @-' else: curl_echo_data = '' curl_data_string = f"--data '{request_body}'" if request_body else '' def _format_header(key): header_value = frontik.util.any_to_unicode(curl_headers[key]) return f"-H '{key}: {_escape_apos(header_value)}'" return "{echo} curl -X {method} '{url}' {headers} {data}".format( echo=curl_echo_data, method=request.method, url=to_unicode(request.url), headers=' '.join(_format_header(k) for k in sorted(curl_headers.keys())), data=curl_data_string ).strip()