Ejemplo n.º 1
0
 def send_head(self):
     if not self.path.startswith(baseurl):
         self.send_error(404, 'File not found')
         return None
     self.path = self.path[len(baseurl):]
     if not self.path.startswith('/'):
         self.path = '/' + self.path
     return SimpleHTTPRequestHandler.send_head(self)
Ejemplo n.º 2
0
 def send_head(self):
     # We override this and handle the directory redirection case because
     # we want to include the per-split prefix.
     path = self.translate_path(self.path)
     if os.path.isdir(path):
         if not self.path.endswith('/'):
             self.send_response(302)
             self.send_header("Location", self.prefix + self.path + "/")
             self.end_headers()
             return None
     return SimpleHTTPRequestHandler.send_head(self)
Ejemplo n.º 3
0
 def send_head(self):
     if (self.server._URL_HTML is not None) and \
        (self.translate_path(self.path).endswith(self.server._URL_HTML)):
         f = io.BytesIO()
         f.write(self.server._STR_HTML.encode('utf8'))
         length = f.tell()
         f.seek(0)
         self.send_response(200)
         self.send_header("Content-type".encode('utf8'),
                          "text/html".encode('utf8'))
         self.send_header("Content-Length".encode('utf8'),
                          str(length).encode('utf8'))
         self.end_headers()
         return f
     else:
         return SimpleHTTPRequestHandler.send_head(self)
Ejemplo n.º 4
0
    def send_head(self):
        if 'Range' not in self.headers:
            self.range = None
            return SimpleHTTPRequestHandler.send_head(self)
        try:
            self.range = parse_byte_range(self.headers['Range'])
        except ValueError as e:
            err_string = 'Invalid byte range with: ' + e
            self.send_error(400, err_string)
            return None
        first, last = self.range

        # Mirroring SimpleHTTPServer.py here
        path = self.translate_path(self.path)
        f = None
        ctype = self.guess_type(path)
        try:
            f = open(path, 'rb')
        except IOError:
            self.send_error(404, 'File not found')
            return None

        fs = os.fstat(f.fileno())
        file_len = fs[6]
        if first >= file_len:
            self.send_error(416, 'Requested Range Not Satisfiable')
            return None

        self.send_response(206)
        self.send_header('Content-type', ctype)
        self.send_header('Accept-Ranges', 'bytes')

        if last is None or last >= file_len:
            last = file_len - 1
        response_length = last - first + 1

        self.send_header('Content-Range',
                         'bytes %s-%s/%s' % (first, last, file_len))
        self.send_header('Content-Length', str(response_length))
        self.send_header('Last-Modified', self.date_time_string(fs.st_mtime))
        self.end_headers()
        return f
Ejemplo n.º 5
0
    def send_head(self):
        """Common code for GET and HEAD commands.
        Return value is either a file object or None
        """

        path = self.translate_path(self.path)
        ctype = self.guess_type(path)

        # Handling file location
        # If directory, let SimpleHTTPRequestHandler handle the request
        if os.path.isdir(path):
            return SimpleHTTPRequestHandler.send_head(self)

        # Handle file request
        f = open(path, 'rb')
        fs = os.fstat(f.fileno())
        size = fs[6]

        start, end = 0, size - 1
        if 'Range' in self.headers:
            start, end = self.headers.get('Range').strip().strip(
                'bytes=').split('-')
        start = int(start)
        end = int(end)

        # Correct the values of start and end
        start = max(start, 0)
        end = min(end, size - 1)
        self.range = (start, end)
        # Setup headers and response
        length = end - start + 1
        self.send_response(206)
        self.send_header('Content-type', ctype)
        self.send_header('Accept-Ranges', 'bytes')
        self.send_header('Content-Range',
                         'bytes %s-%s/%s' % (start, end, size))
        self.send_header('Content-Length', str(length))
        self.send_header('Last-Modified', self.date_time_string(fs.st_mtime))
        self.end_headers()

        return f
Ejemplo n.º 6
0
    def send_head(self):
        if 'Range' not in self.headers:
            self.range = None
            return SimpleHTTPRequestHandler.send_head(self)
        try:
            self.range = parse_byte_range(self.headers['Range'])
        except ValueError as e:
            self.send_error(400, 'Invalid byte range')
            return None
        first, last = self.range

        # Mirroring SimpleHTTPServer.py here
        path = self.translate_path(self.path)
        f = None
        ctype = self.guess_type(path)
        try:
            f = open(path, 'rb')
        except IOError:
            self.send_error(404, 'File not found')
            return None

        fs = os.fstat(f.fileno())
        file_len = fs[6]
        if first >= file_len:
            self.send_error(416, 'Requested Range Not Satisfiable')
            return None

        self.send_response(206)
        self.send_header('Content-type', ctype)
        self.send_header('Accept-Ranges', 'bytes')

        if last is None or last >= file_len:
            last = file_len - 1
        response_length = last - first + 1

        self.send_header('Content-Range',
                         'bytes %s-%s/%s' % (first, last, file_len))
        self.send_header('Content-Length', str(response_length))
        self.send_header('Last-Modified', self.date_time_string(fs.st_mtime))
        self.end_headers()
        return f
Ejemplo n.º 7
0
 def send_head(self):
     if self.is_in_cgi_dir():
         self.run_cgi()
     else:
         return SimpleHTTPRequestHandler.send_head(self)