Skip to content

Commit 5fcc3b8

Browse files
committed
http: add support for headers
It is useful to be able to specify additional headers to send when making overpass requests. For example a special user agent, or an API token. Signed-off-by: Frank Villaro-Dixon <frank@villaro-dixon.eu>
1 parent 29ddf0c commit 5fcc3b8

File tree

1 file changed

+12
-3
lines changed

1 file changed

+12
-3
lines changed

overpy/__init__.py

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
from datetime import datetime
22
from decimal import Decimal
33
from functools import partial
4-
from urllib.request import urlopen
4+
from urllib.request import urlopen, Request
55
from urllib.error import HTTPError
66
from xml.sax import handler, make_parser
77
import xml.etree.ElementTree
@@ -64,6 +64,7 @@ class Overpass:
6464
:param xml_parser: The xml parser to use
6565
:param max_retry_count: Max number of retries (Default: default_max_retry_count)
6666
:param retry_timeout: Time to wait between tries (Default: default_retry_timeout)
67+
:param headers: Dict of headers to send with the request
6768
"""
6869

6970
#: Global max number of retries (Default: 0)
@@ -75,18 +76,25 @@ class Overpass:
7576
#: Default URL of the Overpass server
7677
default_url: ClassVar[str] = "http://overpass-api.de/api/interpreter"
7778

79+
default_headers: ClassVar[Dict[str, str]] = {}
80+
7881
def __init__(
7982
self,
8083
url: Optional[str] = None,
8184
xml_parser: int = XML_PARSER_SAX,
8285
max_retry_count: int = None,
83-
retry_timeout: float = None):
86+
retry_timeout: float = None,
87+
headers: dict[str, str] = None):
8488

8589
#: URL to use for this instance
8690
self.url = self.default_url
8791
if url is not None:
8892
self.url = url
8993

94+
self.headers = self.default_headers
95+
if headers is not None:
96+
self.headers = headers
97+
9098
self._regex_extract_error_msg = re.compile(br"\<p\>(?P<msg>\<strong\s.*?)\</p\>")
9199
self._regex_remove_tag = re.compile(b"<[^>]*?>")
92100

@@ -140,7 +148,8 @@ def query(self, query: Union[bytes, str]) -> "Result":
140148

141149
response = b""
142150
try:
143-
with urlopen(self.url, query) as f:
151+
req = Request(self.url, data=query, headers=self.headers)
152+
with urlopen(req) as f:
144153
response = f.read()
145154
except HTTPError as exc:
146155
f = exc

0 commit comments

Comments
 (0)