Re-upload: CI infrastructure issue resolved, all tests verified passing
This commit is contained in:
70
http_log_explorer/exporters/curl_exporter.py
Normal file
70
http_log_explorer/exporters/curl_exporter.py
Normal file
@@ -0,0 +1,70 @@
|
||||
"""cURL exporter for HTTP entries."""
|
||||
|
||||
|
||||
from http_log_explorer.models import HTTPEntry
|
||||
|
||||
|
||||
class CurlExporter:
|
||||
"""Export HTTP entries as cURL commands."""
|
||||
|
||||
def export(self, entry: HTTPEntry) -> str:
|
||||
"""Export a single entry as cURL command.
|
||||
|
||||
Args:
|
||||
entry: HTTPEntry object
|
||||
|
||||
Returns:
|
||||
cURL command string
|
||||
"""
|
||||
parts = ["curl"]
|
||||
|
||||
parts.append("-X")
|
||||
parts.append(entry.request.method)
|
||||
|
||||
if entry.request.headers:
|
||||
for name, value in entry.request.headers.items():
|
||||
if name.lower() not in ("host", "content-length"):
|
||||
parts.append("-H")
|
||||
parts.append(f"{name}: {value}")
|
||||
|
||||
if entry.request.body:
|
||||
escaped_body = self._escape_body(entry.request.body)
|
||||
parts.append("-d")
|
||||
parts.append(f"'{escaped_body}'")
|
||||
|
||||
parts.append(f"'{entry.request.url}'")
|
||||
|
||||
return " ".join(parts)
|
||||
|
||||
def export_batch(self, entries: list[HTTPEntry]) -> list[str]:
|
||||
"""Export multiple entries as cURL commands.
|
||||
|
||||
Args:
|
||||
entries: List of HTTPEntry objects
|
||||
|
||||
Returns:
|
||||
List of cURL command strings
|
||||
"""
|
||||
return [self.export(entry) for entry in entries]
|
||||
|
||||
def _escape_body(self, body: str) -> str:
|
||||
"""Escape body string for shell.
|
||||
|
||||
Args:
|
||||
body: Body content
|
||||
|
||||
Returns:
|
||||
Escaped string
|
||||
"""
|
||||
return body.replace("'", "'\\''")
|
||||
|
||||
def to_file(self, entries: list[HTTPEntry], path: str) -> None:
|
||||
"""Write cURL commands to file (one per line).
|
||||
|
||||
Args:
|
||||
entries: List of HTTPEntry objects
|
||||
path: Output file path
|
||||
"""
|
||||
with open(path, "w") as f:
|
||||
for entry in entries:
|
||||
f.write(self.export(entry) + "\n")
|
||||
Reference in New Issue
Block a user