|
|
|
@@ -97,15 +97,6 @@ class Executor: |
|
|
|
headers = self.variable_pool.convert_template(self.node_data.headers).text |
|
|
|
self.headers = _plain_text_to_dict(headers) |
|
|
|
|
|
|
|
body = self.node_data.body |
|
|
|
if body is None: |
|
|
|
return |
|
|
|
if "content-type" not in (k.lower() for k in self.headers) and body.type in BODY_TYPE_TO_CONTENT_TYPE: |
|
|
|
self.headers["Content-Type"] = BODY_TYPE_TO_CONTENT_TYPE[body.type] |
|
|
|
if body.type == "form-data": |
|
|
|
self.boundary = f"----WebKitFormBoundary{_generate_random_string(16)}" |
|
|
|
self.headers["Content-Type"] = f"multipart/form-data; boundary={self.boundary}" |
|
|
|
|
|
|
|
def _init_body(self): |
|
|
|
body = self.node_data.body |
|
|
|
if body is not None: |
|
|
|
@@ -154,9 +145,8 @@ class Executor: |
|
|
|
for k, v in files.items() |
|
|
|
if v.related_id is not None |
|
|
|
} |
|
|
|
|
|
|
|
self.data = form_data |
|
|
|
self.files = files |
|
|
|
self.files = files or None |
|
|
|
|
|
|
|
def _assembling_headers(self) -> dict[str, Any]: |
|
|
|
authorization = deepcopy(self.auth) |
|
|
|
@@ -217,6 +207,7 @@ class Executor: |
|
|
|
"timeout": (self.timeout.connect, self.timeout.read, self.timeout.write), |
|
|
|
"follow_redirects": True, |
|
|
|
} |
|
|
|
# request_args = {k: v for k, v in request_args.items() if v is not None} |
|
|
|
|
|
|
|
response = getattr(ssrf_proxy, self.method)(**request_args) |
|
|
|
return response |
|
|
|
@@ -244,6 +235,13 @@ class Executor: |
|
|
|
raw += f"Host: {url_parts.netloc}\r\n" |
|
|
|
|
|
|
|
headers = self._assembling_headers() |
|
|
|
body = self.node_data.body |
|
|
|
boundary = f"----WebKitFormBoundary{_generate_random_string(16)}" |
|
|
|
if body: |
|
|
|
if "content-type" not in (k.lower() for k in self.headers) and body.type in BODY_TYPE_TO_CONTENT_TYPE: |
|
|
|
headers["Content-Type"] = BODY_TYPE_TO_CONTENT_TYPE[body.type] |
|
|
|
if body.type == "form-data": |
|
|
|
headers["Content-Type"] = f"multipart/form-data; boundary={boundary}" |
|
|
|
for k, v in headers.items(): |
|
|
|
if self.auth.type == "api-key": |
|
|
|
authorization_header = "Authorization" |
|
|
|
@@ -256,7 +254,6 @@ class Executor: |
|
|
|
|
|
|
|
body = "" |
|
|
|
if self.files: |
|
|
|
boundary = self.boundary |
|
|
|
for k, v in self.files.items(): |
|
|
|
body += f"--{boundary}\r\n" |
|
|
|
body += f'Content-Disposition: form-data; name="{k}"\r\n\r\n' |
|
|
|
@@ -271,7 +268,6 @@ class Executor: |
|
|
|
elif self.data and self.node_data.body.type == "x-www-form-urlencoded": |
|
|
|
body = urlencode(self.data) |
|
|
|
elif self.data and self.node_data.body.type == "form-data": |
|
|
|
boundary = self.boundary |
|
|
|
for key, value in self.data.items(): |
|
|
|
body += f"--{boundary}\r\n" |
|
|
|
body += f'Content-Disposition: form-data; name="{key}"\r\n\r\n' |