Skip to content

Commit 5b94107

Browse files
authored
fix: add User-Agent value for data collection HTTP requests (#574)
Signed-off-by: tdruez <tdruez@aboutcode.org>
1 parent c14e6c0 commit 5b94107

2 files changed

Lines changed: 21 additions & 1 deletion

File tree

component_catalog/tests/test_models.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2473,6 +2473,21 @@ def test_collect_package_data(self, mock_get):
24732473
}
24742474
self.assertEqual(expected_data, collect_package_data(download_url))
24752475

2476+
@mock.patch("requests.get")
2477+
def test_collect_package_data_user_agent(self, mock_get):
2478+
mock_get.return_value = mock.Mock(
2479+
content=b"\x00",
2480+
headers={"content-length": 1},
2481+
status_code=200,
2482+
url="http://domain.com/a.zip",
2483+
)
2484+
2485+
collect_package_data("http://domain.com/a.zip")
2486+
self.assertEqual(
2487+
download.USER_AGENT,
2488+
mock_get.call_args.kwargs["headers"]["User-Agent"],
2489+
)
2490+
24762491
def test_package_create_save_set_usage_policy_from_license(self):
24772492
from policy.models import AssociatedPolicy
24782493
from policy.models import UsagePolicy

dejacode_toolkit/download.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,14 +26,19 @@
2626
CONTENT_MAX_LENGTH = 536870912 # 512 MB
2727
DEFAULT_TIMEOUT = 5
2828

29+
# Some sites (e.g. crates.io) reject requests without an identifying User-Agent.
30+
USER_AGENT = "DejaCode (https://github.com/aboutcode-org/dejacode)"
31+
2932

3033
class DataCollectionException(Exception):
3134
pass
3235

3336

3437
def collect_package_data(url):
38+
headers = {"User-Agent": USER_AGENT}
39+
3540
try:
36-
response = requests.get(url, timeout=DEFAULT_TIMEOUT, stream=True)
41+
response = requests.get(url, headers=headers, timeout=DEFAULT_TIMEOUT, stream=True)
3742
except (TimeoutError, requests.RequestException) as e:
3843
raise DataCollectionException(e)
3944

0 commit comments

Comments
 (0)