| if not url: | if not url: | ||||
| raise ValueError("Invalid file url") | raise ValueError("Invalid file url") | ||||
| mime_type = mimetypes.guess_type(url)[0] or "" | |||||
| file_size = -1 | |||||
| filename = url.split("/")[-1].split("?")[0] or "unknown_file" | |||||
| resp = ssrf_proxy.head(url, follow_redirects=True) | resp = ssrf_proxy.head(url, follow_redirects=True) | ||||
| if resp.status_code == httpx.codes.OK: | if resp.status_code == httpx.codes.OK: | ||||
| # Try to extract filename from response headers or URL | |||||
| content_disposition = resp.headers.get("Content-Disposition") | |||||
| if content_disposition: | |||||
| if content_disposition := resp.headers.get("Content-Disposition"): | |||||
| filename = content_disposition.split("filename=")[-1].strip('"') | filename = content_disposition.split("filename=")[-1].strip('"') | ||||
| else: | |||||
| filename = url.split("/")[-1].split("?")[0] | |||||
| # Create the File object | |||||
| file_size = int(resp.headers.get("Content-Length", -1)) | |||||
| mime_type = str(resp.headers.get("Content-Type", "")) | |||||
| else: | |||||
| filename = "" | |||||
| file_size = -1 | |||||
| mime_type = "" | |||||
| file_size = int(resp.headers.get("Content-Length", file_size)) | |||||
| mime_type = mime_type or str(resp.headers.get("Content-Type", "")) | |||||
| # If filename is empty, set a default one | |||||
| if not filename: | |||||
| filename = "unknown_file" | |||||
| # Determine file extension | # Determine file extension | ||||
| extension = "." + filename.split(".")[-1] if "." in filename else ".bin" | |||||
| extension = mimetypes.guess_extension(mime_type) or "." + filename.split(".")[-1] if "." in filename else ".bin" | |||||
| if not mime_type: | if not mime_type: | ||||
| mime_type, _ = mimetypes.guess_type(url) | mime_type, _ = mimetypes.guess_type(url) |