def _handler(tornado_request): try: headers = HttpHeaders() for k, v in tornado_request.headers.get_all(): headers.add(k, v) body_file = io.BytesIO(tornado_request.body) request = HttpRequest(proto=tornado_request.version, host=tornado_request.host, method=tornado_request.method, uri=tornado_request.uri, args=tornado_request.arguments, remote_ip=tornado_request.remote_ip, headers=headers, body=tornado_request.body, body_file=body_file) request._tornado_request = tornado_request value = yield launch(self.handle_request, request) code, headers, content = extract_response(value) except: code, headers, content = 500, {}, "500 Internal Server Error" tornado_request.write("HTTP/1.1 %s %s\r\n" % (code, responses.get(code, 'Unknown'))) headers.setdefault('Server', 'monocle/%s' % VERSION) headers.setdefault('Content-Length', str(len(content))) for name, value in headers.iteritems(): tornado_request.write("%s: %s\r\n" % (name, value)) tornado_request.write("\r\n") tornado_request.write(content) tornado_request.finish()
def _handler(tornado_request): try: headers = HttpHeaders() for k, v in tornado_request.headers.get_all(): headers.add(k, v) body_file = io.BytesIO(tornado_request.body) request = HttpRequest(proto=tornado_request.version, host=tornado_request.host, method=tornado_request.method, uri=tornado_request.uri, args=tornado_request.arguments, remote_ip=tornado_request.remote_ip, headers=headers, body=tornado_request.body, body_file=body_file) request._tornado_request = tornado_request value = yield launch(self.handle_request, request) code, headers, content = extract_response(value) except Exception: code, headers, content = 500, {}, "500 Internal Server Error" tornado_request.write("HTTP/1.1 %s %s\r\n" % (code, responses.get(code, 'Unknown'))) headers.setdefault('Server', 'monocle/%s' % VERSION) headers.setdefault('Content-Length', str(len(content))) for name, value in headers.iteritems(): if isinstance(name, unicode): name = name.encode('ascii') if isinstance(value, unicode): value = value.encode('ascii') tornado_request.write("%s: %s\r\n" % (name, value)) tornado_request.write("\r\n") tornado_request.write(content) tornado_request.finish()
def request(self, url, headers=None, method='GET', body=None): parts = urlparse.urlsplit(url) if parts.scheme not in ['http', 'https']: raise HttpException('unsupported url scheme %s' % parts.scheme) host = parts.hostname port = parts.port or self.DEFAULT_PORTS[parts.scheme] path = '/' + url.split('/', 3)[3] if not headers: headers = HttpHeaders() headers = self._normalize_headers(headers) headers.setdefault('User-Agent', 'monocle/%s' % VERSION) headers.setdefault('Host', host) if body is not None: headers.setdefault('Content-Length', str(len(body))) if not self._proto or not self._proto.transport.connected: yield self.connect(host, port, scheme=parts.scheme) self._proto.sendCommand(method, path) for k, v in headers.iteritems(): self._proto.sendHeader(k, v) self._proto.endHeaders() if body is not None: self._proto.transport.write(body) response = yield self._proto.response_cb self._proto.close() self._proto = None yield Return(response)
def _handler(twisted_request): try: headers = HttpHeaders() for k, vs in twisted_request.requestHeaders.getAllRawHeaders(): for v in vs: headers.add(k, v) # decode UTF-8 keys, matching tornado arg parsing behavior args = dict( [(k.decode('utf-8'), v) for k, v in twisted_request.args.iteritems()]) body = None if hasattr(twisted_request.content, "getvalue"): body = twisted_request.content.getvalue() else: twisted_request.content.seek(0, os.SEEK_END) if twisted_request.content.tell() <= self.max_body_str_len: twisted_request.content.seek(0, os.SEEK_SET) body = twisted_request.content.read() twisted_request.content.seek(0, os.SEEK_SET) request = HttpRequest( proto=twisted_request.clientproto, host=twisted_request.getRequestHostname(), method=twisted_request.method, uri=twisted_request.uri, args=args, remote_ip=twisted_request.getClientIP(), headers=headers, body=body, body_file=twisted_request.content) request._twisted_request = twisted_request value = yield self.handler(request) code, headers, content = extract_response(value) except Exception: log_exception() code, headers, content = 500, {}, "500 Internal Server Error" try: if twisted_request._disconnected: return twisted_request.setResponseCode(code) headers.setdefault('Server', 'monocle/%s' % VERSION) grouped_headers = {} for name, value in headers.iteritems(): if name in grouped_headers: grouped_headers[name].append(value) else: grouped_headers[name] = [value] for name, value in grouped_headers.iteritems(): twisted_request.responseHeaders.setRawHeaders(name, value) twisted_request.write(content) # close connections with a 'close' header if headers.get('Connection', '').lower() == 'close': twisted_request.channel.persistent = False twisted_request.finish() except Exception: log_exception() raise
def _handler(twisted_request): try: headers = HttpHeaders() for k, vs in twisted_request.requestHeaders.getAllRawHeaders(): for v in vs: headers.add(k, v) # decode UTF-8 keys, matching tornado arg parsing behavior args = dict([(k.decode('utf-8'), v) for k, v in twisted_request.args.iteritems()]) body = None if hasattr(twisted_request.content, "getvalue"): body = twisted_request.content.getvalue() else: twisted_request.content.seek(0, os.SEEK_END) if twisted_request.content.tell() <= self.max_body_str_len: twisted_request.content.seek(0, os.SEEK_SET) body = twisted_request.content.read() twisted_request.content.seek(0, os.SEEK_SET) request = HttpRequest( proto=twisted_request.clientproto, host=twisted_request.getRequestHostname(), method=twisted_request.method, uri=twisted_request.uri, args=args, remote_ip=twisted_request.getClientIP(), headers=headers, body=body, body_file=twisted_request.content) request._twisted_request = twisted_request value = yield self.handler(request) code, headers, content = extract_response(value) except Exception: log_exception() code, headers, content = 500, {}, "500 Internal Server Error" try: if twisted_request._disconnected: return twisted_request.setResponseCode(code) headers.setdefault('Server', 'monocle/%s' % VERSION) grouped_headers = {} for name, value in headers.iteritems(): if name in grouped_headers: grouped_headers[name].append(value) else: grouped_headers[name] = [value] for name, value in grouped_headers.iteritems(): if isinstance(name, unicode): name = name.encode('ascii') if isinstance(value, unicode): value = value.encode('ascii') twisted_request.responseHeaders.setRawHeaders(name, value) twisted_request.write(content) # close connections with a 'close' header if headers.get('Connection', '').lower() == 'close': twisted_request.channel.persistent = False twisted_request.finish() except Exception: log_exception() raise