A library for interacting with JPL Horizons
Use Requests
urllib is kind of a pain to use. Use Requests instead. Among other things, all of this code:
    for key in self.keys:
        request += &quot;&amp;&quot; + key + &quot;='&quot; + self.keys[key] + &quot;'&quot;

will go away. Requests has query string formatting from a dictionary.
Julian conversion
It's doubtful that you need to be doing this yourself. Find a library such as https://pypi.org/project/julian/ .
Combined-inequality syntax
date.year &lt; 1801 or date.year &gt; 2099

should be
not (1800 &lt; date.year &lt; 2100)

Squaring
math.pow(60,2)

should just be
60**2

Late serialization
I would recommend that HorizonsRequest.keys (which, by the way, is not only a collection of keys - it's a dictionary, so it's misnamed) not be constructed until it's needed in send. Nor should you expose arbitrary set_key / delete_key. In theory you should understand enough about the request format that information to create it is stored in more strongly-typed variables that can receive better validation. For instance, do not store
&quot;OBJ_DATA&quot;: &quot;NO&quot;,

as a class member; instead store
obj_data: bool = False