Converts a :class:`~scrapy.Request` object to a curl command. :param :class:`~scrapy.Request`: Request object to be converted :return: string containing the curl command
(request: Request)
| 173 | |
| 174 | |
| 175 | def request_to_curl(request: Request) -> str: |
| 176 | """ |
| 177 | Converts a :class:`~scrapy.Request` object to a curl command. |
| 178 | |
| 179 | :param :class:`~scrapy.Request`: Request object to be converted |
| 180 | :return: string containing the curl command |
| 181 | """ |
| 182 | method = request.method |
| 183 | |
| 184 | data = f"--data-raw '{request.body.decode('utf-8')}'" if request.body else "" |
| 185 | |
| 186 | headers = " ".join( |
| 187 | f"-H '{k.decode()}: {v[0].decode()}'" for k, v in request.headers.items() |
| 188 | ) |
| 189 | |
| 190 | url = request.url |
| 191 | cookies = "" |
| 192 | if request.cookies: |
| 193 | if isinstance(request.cookies, dict): |
| 194 | cookie = "; ".join(f"{k}={v}" for k, v in request.cookies.items()) |
| 195 | cookies = f"--cookie '{cookie}'" |
| 196 | elif isinstance(request.cookies, list): |
| 197 | cookie = "; ".join( |
| 198 | f"{next(iter(c.keys()))}={next(iter(c.values()))}" |
| 199 | for c in request.cookies |
| 200 | ) |
| 201 | cookies = f"--cookie '{cookie}'" |
| 202 | |
| 203 | curl_cmd = f"curl -X {method} {url} {data} {headers} {cookies}".strip() |
| 204 | return " ".join(curl_cmd.split()) |