From 31d79e0c0d50bb6c28287f4ac3e2561bf3c9bdc6 Mon Sep 17 00:00:00 2001 From: vlw Date: Sat, 14 Mar 2026 10:40:50 +0100 Subject: [PATCH] feat: save output of response headers and body to files (#3) In this PR we add a new directly to store the files used with curl. We also put the response body and headers into files now instead of echoing them to the console. This makes them easier to read, and we can pretty-print JSON response bodies with proper syntax highlighting (and more). Since we have a few files now, I've also added an "init.sh" file that can be used to create the necessary files on first load. Reviewed-on: https://codeberg.org/vlw/curl/pulls/3 Co-authored-by: vlw Co-committed-by: vlw --- .gitignore | 8 +++--- README.md | 73 +++++++++++++++++++++++++++++++++------------------ curl.sh | 45 ++++++++++++++++++++----------- curl/.gitkeep | 0 init.sh | 11 ++++++++ 5 files changed, 91 insertions(+), 46 deletions(-) create mode 100644 curl/.gitkeep create mode 100755 init.sh diff --git a/.gitignore b/.gitignore index 252e539..37211d2 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,4 @@ -params.txt -headers.json -payload.json -disable_peer_validation \ No newline at end of file +curl/* +!curl/.gitkeep + +disable_peer_validation diff --git a/README.md b/README.md index 72256ed..03c1d80 100644 --- a/README.md +++ b/README.md @@ -1,33 +1,58 @@ +![screenshot](https://codeberg.org/attachments/1cae98c6-0873-41fd-aad0-d33bf495fc50) + ![license](https://licensebuttons.net/p/zero/1.0/88x31.png) -# Simple curl bash wrapper - +This is a wrapper for curl written in bash designed to be used along with Visual Studio Code. ---- +> Mom, can we get Postman? +> +> We've got Postman at home! +> +> [\- Source](https://knowyourmeme.com/memes/we-have-food-at-home) -**This is a very simple wrapper for curl that I use with VSCode (code-server) to make HTTP requests - like Postman but super simple.** +[Here is a simpler version of this script that prints the response body directly to the console](/vlw/curl/src/tag/1.1.0) -VSCode is not required to run this script, I use it as a GUI. +# Get started +Clone this repo +```sh +git clone https://codeberg.org/vlw/curl --depth 1 +``` + +This script uses separate files in the `curl/` directory for various request options. You can generate these files on first load by running the init script. +```sh +./init.sh +``` + +> [!Note] +> If you're using this with VSCode, drag each file into the workspace area where you want it to display. You of course don't have to follow the layout in the screenshot above. # Files -This script uses separate files for various request options. Create these files in the same directory as `curl.sh`. +This script reads or writes values in these files to construct a request or show a response from a request. -## `params.txt` -URL search parameters. (Leading "?" is optional) -``` -foo=bar&hello=world +## Disable SSL peer validation +You can disable SSL peer validation (for self-signed certificates etc.) by creating an empty file `disable_peer_validation` in the base directory of this repo. +```sh +touch disable_peer_validation ``` -## `payload.json` -JSON request body that will be sent with all requests (except `GET`). +## Request +### `curl/req_params.txt` +URL search parameters. Each newline is treated as a separate search parameter. +``` +foo=bar +fizz=buzz +``` + +### `curl/req_body.json` +JSON request body that will be sent with all requests (except `GET`). Leave empty to send nothing. ```json { "request_body_parameter": "request_body_value" } ``` -## `headers.json` +### `curl/req_headers.json` Key-value JSON object of optional request headers. ```json { @@ -35,23 +60,19 @@ Key-value JSON object of optional request headers. } ``` -## `disable_peer_validation` -Optional empty file that when present will disable SSL peer validation - for self-signed certificates etc. +## Response +### `curl/resp_headers.txt` +A raw output of the response headers from the last request + +### `curl/resp_body.txt` +The raw response body received from the last request + +### `curl/resp_body.json` +The raw response body parsed into- and automatically pretty-printed JSON # Make a request Run the `curl.sh` file from your shell and pass it two parametes for URL and request method. ```sh ./curl.sh https://example.com GET -``` - -The response body will be printed to stdout. - -*Example* -``` -vlw@example:/curl$ ./curl.sh https://example.com GET -GET https://example.com?foo=bar - -"This is an example response body in plaintext" -vlw@example:/curl$ ``` \ No newline at end of file diff --git a/curl.sh b/curl.sh index db614c0..1819938 100755 --- a/curl.sh +++ b/curl.sh @@ -8,18 +8,25 @@ fi URL="$1" METHOD="$2" -PARAMS_FILE="params.txt" -HEADERS_FILE="headers.json" -PAYLOAD_FILE="payload.json" + DISABLE_SSL_FILE="disable_peer_validation" -# Append URL search parameters from params.txt -if [ -f $PARAMS_FILE ]; then - PARAMS=$( $RESP_BODY_JSON_FILE diff --git a/curl/.gitkeep b/curl/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/init.sh b/init.sh new file mode 100755 index 0000000..758e473 --- /dev/null +++ b/init.sh @@ -0,0 +1,11 @@ +#!/bin/bash + +cd curl + +echo "" > resp_body.txt +echo "" > req_params.txt +echo "" > resp_headers.txt + +echo "{}" > req_body.json +echo "{}" > resp_body.json +echo "{}" > req_headers.json