Skip to content

Commit

Permalink
Fix content-type header case sensitivity (#9961)
Browse files Browse the repository at this point in the history
  • Loading branch information
fujita-h authored Oct 29, 2024
1 parent c6e54c8 commit 539fc8b
Show file tree
Hide file tree
Showing 3 changed files with 38 additions and 3 deletions.
4 changes: 2 additions & 2 deletions api/core/workflow/nodes/http_request/entities.py
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,7 @@ def __init__(self, response: httpx.Response):
@property
def is_file(self):
content_type = self.content_type
content_disposition = self.response.headers.get("Content-Disposition", "")
content_disposition = self.response.headers.get("content-disposition", "")

return "attachment" in content_disposition or (
not any(non_file in content_type for non_file in NON_FILE_CONTENT_TYPES)
Expand All @@ -103,7 +103,7 @@ def is_file(self):

@property
def content_type(self) -> str:
return self.headers.get("Content-Type", "")
return self.headers.get("content-type", "")

@property
def text(self) -> str:
Expand Down
3 changes: 2 additions & 1 deletion api/core/workflow/nodes/http_request/node.py
Original file line number Diff line number Diff line change
Expand Up @@ -142,10 +142,11 @@ def extract_files(self, url: str, response: Response) -> list[File]:
Extract files from response
"""
files = []
is_file = response.is_file
content_type = response.content_type
content = response.content

if content_type:
if is_file and content_type:
# extract filename from url
filename = path.basename(url)
# extract extension if possible
Expand Down
34 changes: 34 additions & 0 deletions api/tests/integration_tests/workflow/nodes/test_http.py
Original file line number Diff line number Diff line change
Expand Up @@ -430,3 +430,37 @@ def test_multi_colons_parse(setup_http_mock):
assert urlencode({"Redirect": "http://example2.com"}) in result.process_data.get("request", "")
assert 'form-data; name="Redirect"\r\n\r\nhttp://example6.com' in result.process_data.get("request", "")
# assert "http://example3.com" == resp.get("headers", {}).get("referer")


def test_image_file(monkeypatch):
from types import SimpleNamespace

monkeypatch.setattr(
"core.tools.tool_file_manager.ToolFileManager.create_file_by_raw",
lambda *args, **kwargs: SimpleNamespace(id="1"),
)

node = init_http_node(
config={
"id": "1",
"data": {
"title": "http",
"desc": "",
"method": "get",
"url": "https://cloud.dify.ai/logo/logo-site.png",
"authorization": {
"type": "no-auth",
"config": None,
},
"params": "",
"headers": "",
"body": None,
},
}
)

result = node._run()
assert result.process_data is not None
assert result.outputs is not None
resp = result.outputs
assert len(resp.get("files", [])) == 1

0 comments on commit 539fc8b

Please sign in to comment.