Absolute DNS lookups

This commit is contained in:
Edward Betts 2024-02-25 15:15:38 +00:00
parent d27dd89a1f
commit d707eef267

View file

@ -11,7 +11,33 @@ from email.mime.text import MIMEText
from email.utils import formatdate, make_msgid from email.utils import formatdate, make_msgid
import requests import requests
from requests.adapters import HTTPAdapter
from urllib3.exceptions import InsecureRequestWarning # type: ignore from urllib3.exceptions import InsecureRequestWarning # type: ignore
from urllib3.util.url import parse_url # type: ignore
class AbsoluteDNSAdapter(HTTPAdapter):
"""A custom adapter for requests to ensure hostnames are treated as absolute."""
def add_dot_to_hostname(self, url: str) -> str:
"""Append a dot to the hostname to treat it as an absolute domain name."""
parsed_url = parse_url(url)
# Append a dot to the hostname if it's not already there.
hostname = parsed_url.host
if not hostname.endswith("."):
hostname += "."
# Reconstruct the URL with the modified hostname.
new_url: str = parsed_url._replace(host=hostname).url
return new_url
def send(self, request, **kwargs): # type: ignore
"""Override the send method to modify the request URL before sending."""
# Modify the request URL to ensure the hostname is treated as absolute.
request.url = self.add_dot_to_hostname(request.url)
return super().send(request, **kwargs)
config_file_path = os.path.expanduser( config_file_path = os.path.expanduser(
os.path.join( os.path.join(
@ -35,6 +61,12 @@ headers = {"User-Agent": AGENT, "Accept": "text/html"}
s = requests.Session() s = requests.Session()
s.headers.update(headers) s.headers.update(headers)
# Create a session and mount the custom adapter for both HTTP and HTTPS requests.
adapter = AbsoluteDNSAdapter()
s.mount("http://", adapter)
s.mount("https://", adapter)
MAIL_FROM = "edward@4angle.com" MAIL_FROM = "edward@4angle.com"
MAIL_TO_NAME = "Edward Betts" MAIL_TO_NAME = "Edward Betts"
MAIL_TO_ADDRESS = "edward@4angle.com" MAIL_TO_ADDRESS = "edward@4angle.com"