diff --git a/src/urlscan/client.py b/src/urlscan/client.py index 5cdff2e..b1a1f06 100644 --- a/src/urlscan/client.py +++ b/src/urlscan/client.py @@ -496,6 +496,21 @@ def get_dom(self, uuid: str) -> str: """ return self.get_text(f"/dom/{uuid}/") + def get_response(self, file_hash: str) -> str: + """Get a (Script|Document|Fetch|XHR) response in plain text format by SHA256 hash. + + Args: + file_hash (str): SHA256 hash of the response. + + Returns: + str: Response content as a string. + + Reference: + https://docs.urlscan.io/apis/urlscan-openapi/scanning/response + + """ + return self.get_text(f"/responses/{file_hash}/") + def search( self, q: str = "", diff --git a/tests/integration/test_client.py b/tests/integration/test_client.py index 2a2dc7a..a02fe95 100644 --- a/tests/integration/test_client.py +++ b/tests/integration/test_client.py @@ -46,3 +46,12 @@ def test_get_user_agents(client: Client): user_agents = client.get_user_agents() assert isinstance(user_agents, dict) assert len(user_agents) > 0 + + +@pytest.mark.integration +def test_get_response(client: Client): + # hash of an empty content/string + res = client.get_response( + "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + ) + assert res == "" diff --git a/tests/unit/test_client.py b/tests/unit/test_client.py index 9d2cd40..463fb43 100644 --- a/tests/unit/test_client.py +++ b/tests/unit/test_client.py @@ -530,3 +530,12 @@ def test_error_3(client: Client, httpserver: HTTPServer): assert exc.code is None assert exc.type is None assert exc.errors is not None + + +def test_get_response(client: Client, httpserver: HTTPServer): + httpserver.expect_request("/responses/dummy/", method="GET").respond_with_data( + "dummy", content_type="text/plain" + ) + + got = client.get_response("dummy") + assert got == "dummy"