Skip to content

Commit a517515

Browse files
authored
fix(api): set Referer and Origin headers to make polling work (#159)
1 parent d56c42e commit a517515

File tree

2 files changed

+25
-0
lines changed

2 files changed

+25
-0
lines changed

src/elmo/api/client.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99

1010
from .. import query as q
1111
from ..__about__ import __version__
12+
from ..systems import ELMO_E_CONNECT
1213
from ..utils import _camel_to_snake_case, _sanitize_session_id
1314
from .decorators import require_lock, require_session
1415
from .exceptions import (
@@ -49,10 +50,21 @@ def __init__(self, base_url=None, domain=None, session_id=None):
4950
self._session_id = session_id
5051
self._panel = None
5152
self._lock = Lock()
53+
54+
# Conditionally add required headers
55+
if self._router._base_url == ELMO_E_CONNECT:
56+
self._session.headers.update(
57+
{
58+
"Referer": "https://webservice.elmospa.com/",
59+
"Origin": "https://webservice.elmospa.com",
60+
}
61+
)
62+
5263
# Debug
5364
_LOGGER.debug(f"Client | Library version: {__version__}")
5465
_LOGGER.debug(f"Client | Router: {self._router._base_url}")
5566
_LOGGER.debug(f"Client | Domain: {self._domain}")
67+
_LOGGER.debug(f"Client | HTTP Headers: {self._session.headers}")
5668

5769
def auth(self, username, password):
5870
"""Authenticate the client and retrieves the access token. This method uses

tests/test_client.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2657,3 +2657,16 @@ def test_client_query_last_id_value_error_empty(server, mocker):
26572657
# Test
26582658
inputs = client.query(query.INPUTS)
26592659
assert inputs["last_id"] == 0
2660+
2661+
2662+
def test_client_constructor_sets_required_headers():
2663+
"""Should set required Referer and Origin headers during initialization otherwise
2664+
polling will fail. Metronet systems do not require these headers.
2665+
Regression test for: https://github.com/palazzem/econnect-python/issues/158
2666+
"""
2667+
client_econnect = ElmoClient(base_url=ELMO_E_CONNECT)
2668+
client_metronet = ElmoClient(base_url=IESS_METRONET)
2669+
assert client_econnect._session.headers["Referer"] == "https://webservice.elmospa.com/"
2670+
assert client_econnect._session.headers["Origin"] == "https://webservice.elmospa.com"
2671+
assert "Referer" not in client_metronet._session.headers
2672+
assert "Origin" not in client_metronet._session.headers

0 commit comments

Comments
 (0)