update
This commit is contained in:
@@ -239,7 +239,7 @@ class HTMLDownloadHandler(DownloadHandler):
|
||||
new_url = self.__download_image(tag["src"], host, base_url)
|
||||
processed[tag["src"]] = new_url
|
||||
if new_url:
|
||||
tag["src"] = new_url
|
||||
tag["src"] = os.path.basename(new_url)
|
||||
except Exception as e:
|
||||
logging.error("Failed to download image: %s, skipping...", tag["src"], exc_info=e)
|
||||
|
||||
|
@@ -28,20 +28,41 @@ class IncompleteResponse(HTTPException):
|
||||
def __init(self, cause):
|
||||
self.cause = cause
|
||||
|
||||
|
||||
class HTTPServerException(Exception):
|
||||
""" Base class for HTTP Server exceptions """
|
||||
status_code: str
|
||||
message: str
|
||||
|
||||
|
||||
class BadRequest(HTTPServerException):
|
||||
""" Malformed HTTP request"""
|
||||
status_code = 400
|
||||
message = "Bad Request"
|
||||
|
||||
|
||||
class MethodNotAllowed(HTTPServerException):
|
||||
""" Method is not allowed """
|
||||
status_code = 405
|
||||
message = "Method Not Allowed"
|
||||
|
||||
def __init(self, allowed_methods):
|
||||
self.allowed_methods = allowed_methods
|
||||
|
||||
|
||||
class InternalServerError(HTTPServerException):
|
||||
""" Internal Server Error """
|
||||
status_code = 500
|
||||
message = "Internal Server Error"
|
||||
|
||||
|
||||
class NotImplemented(HTTPServerException):
|
||||
""" Functionality not implemented """
|
||||
status_code = 501
|
||||
message = "Not Implemented"
|
||||
|
||||
|
||||
class NotFound(HTTPServerException):
|
||||
""" Resource not found """
|
||||
""" Resource not found """
|
||||
status_code = 404
|
||||
message = "Not Found"
|
||||
|
@@ -97,8 +97,6 @@ class ContentLengthRetriever(Retriever):
|
||||
cur_payload_size += len(buffer)
|
||||
yield buffer
|
||||
|
||||
return b""
|
||||
|
||||
|
||||
class RawRetriever(Retriever):
|
||||
|
||||
|
@@ -78,7 +78,8 @@ class RequestHandler:
|
||||
def _has_body(self, headers):
|
||||
return "transfer-encoding" in headers or "content-encoding" in headers
|
||||
|
||||
def _get_date(self):
|
||||
@staticmethod
|
||||
def _get_date():
|
||||
now = datetime.now()
|
||||
stamp = mktime(now.timetuple())
|
||||
return format_date_time(stamp)
|
||||
@@ -114,3 +115,13 @@ class RequestHandler:
|
||||
|
||||
logging.debug("Sending: %r", message)
|
||||
self.conn.conn.sendall(message)
|
||||
|
||||
@staticmethod
|
||||
def send_error(client: socket, code, message):
|
||||
message = f"HTTP/1.1 {code} {message}\r\n"
|
||||
message += RequestHandler._get_date() + "\r\n"
|
||||
message += "Content-Length: 0\r\n"
|
||||
message += "\r\n"
|
||||
|
||||
logging.debug("Sending: %r", message)
|
||||
client.sendall(message.encode(FORMAT))
|
||||
|
@@ -1,10 +1,10 @@
|
||||
import logging
|
||||
import multiprocessing as mp
|
||||
import socket
|
||||
import threading
|
||||
from concurrent.futures import ThreadPoolExecutor
|
||||
from logging import Logger
|
||||
import socket
|
||||
|
||||
from httplib.exceptions import HTTPServerException, InternalServerError
|
||||
from server.RequestHandler import RequestHandler
|
||||
|
||||
THREAD_LIMIT = 128
|
||||
@@ -23,10 +23,8 @@ def worker(address, name, logging_level, queue: mp.Queue, stop_event: mp.Event):
|
||||
|
||||
|
||||
class Worker:
|
||||
|
||||
host: str
|
||||
name: str
|
||||
logger: Logger
|
||||
queue: mp.Queue
|
||||
executor: ThreadPoolExecutor
|
||||
stop_event: mp.Event
|
||||
@@ -68,8 +66,11 @@ class Worker:
|
||||
|
||||
handler = RequestHandler(conn, self.host)
|
||||
handler.listen()
|
||||
except Exception:
|
||||
logging.debug("Internal error")
|
||||
except HTTPServerException as e:
|
||||
RequestHandler.send_error(conn, e.status_code, e.message)
|
||||
except Exception as e:
|
||||
RequestHandler.send_error(conn, InternalServerError.status_code, InternalServerError.message)
|
||||
logging.debug("Internal error", exc_info=e)
|
||||
|
||||
conn.shutdown(socket.SHUT_RDWR)
|
||||
conn.close()
|
||||
|
Reference in New Issue
Block a user