Compare commits

..

9 commits

Author SHA1 Message Date
64db42527b refactor: preserve terminal screen and scrollbuffer (#13)
Maintain the terminal output. If clearing the screen and scrollbuffer is desired, it should be wrapped in an upstream script.

Reviewed-on: https://codeberg.org/vlw/curl/pulls/13
2026-04-12 10:42:17 +02:00
29090ad555 fix: append search parameters to URL only if set (#14)
Append search parameters to URL only if search parameters are provided. This means that "?" will not be appended to the URL if no parameters are provided.

Reviewed-on: https://codeberg.org/vlw/curl/pulls/14
2026-04-12 10:42:00 +02:00
832bea4252 fix: print first response header to CLI (#12)
Let's print the first response header in its entirety as opposed to the response code and.. the first word of the response header text. That is the main reason why we do this, let's just print the whole line.

Reviewed-on: https://codeberg.org/vlw/curl/pulls/12
2026-04-06 11:31:39 +02:00
7b70a6e51d fix: accept at least one argument (#11)
We should accept at least one argument since we made the second argument optional in #9

Reviewed-on: https://codeberg.org/vlw/curl/pulls/11
2026-04-06 11:17:12 +02:00
vlw
e015174467 feat: print response code to CLI (#10)
Closes #8

Reviewed-on: https://codeberg.org/vlw/curl/pulls/10
Co-authored-by: vlw <victor@vlw.se>
Co-committed-by: vlw <victor@vlw.se>
2026-04-06 10:25:27 +02:00
328cebc703 feat: default method to GET if not provided (#9)
Set the default request method to `GET` if no method is provided

Reviewed-on: https://codeberg.org/vlw/curl/pulls/9
2026-04-06 10:25:07 +02:00
a42be0792c docs: echo success message when new config is generated (#7)
Reviewed-on: https://codeberg.org/vlw/curl/pulls/7
2026-03-31 12:02:26 +02:00
dfd0664255 style: use lower case for variables (#6)
Use lower case for variables and upper case for constants to follow common conventions.

Reviewed-on: https://codeberg.org/vlw/curl/pulls/6
2026-03-31 12:02:06 +02:00
vlw
82f4938be0 feat: add script to save and load configs (#5)
In this PR we add the ability to save, move, and load configurations with a new `save.sh` script.

Reviewed-on: https://codeberg.org/vlw/curl/pulls/5
Co-authored-by: vlw <victor@vlw.se>
Co-committed-by: vlw <victor@vlw.se>
2026-03-29 13:47:09 +02:00
6 changed files with 128 additions and 25 deletions

3
.gitignore vendored
View file

@ -1,4 +1,7 @@
curl/* curl/*
!curl/.gitkeep !curl/.gitkeep
saved/*
!saved/.gitkeep
disable_peer_validation disable_peer_validation

View file

@ -1,4 +1,4 @@
![screenshot](https://codeberg.org/attachments/1cae98c6-0873-41fd-aad0-d33bf495fc50) ![curl-screenshot](https://codeberg.org/attachments/9bdd8005-5eea-4add-89c3-8efc61d06b6f)
![license](https://licensebuttons.net/p/zero/1.0/88x31.png) ![license](https://licensebuttons.net/p/zero/1.0/88x31.png)
@ -75,4 +75,14 @@ Run the `curl.sh` file from your shell and pass it two parametes for URL and req
```sh ```sh
./curl.sh https://example.com GET ./curl.sh https://example.com GET
``` ```
# Save and load configurations
The `save.sh` script allows you to save and load configurations so you can easily switch between them.
Command|Description
--|--
`./save.sh save <name>`|Save the current configuration where `<name>` is the name of this configuration
`./save.sh move <name>`|Move the current configuration where `<name>` is the name of this configuration. A new empty configuration will be created.
`./save.sh load <name>`|Load a saved configuration where `<name>` is the name of the target configuration. The current configuration will be saved as `._backup`.
`./save.sh list`|List all saved configurations

52
curl.sh
View file

@ -1,14 +1,11 @@
#!/bin/bash #!/bin/bash
# Check if the correct number of arguments is provided # Check if the correct number of arguments is provided
if [ "$#" -ne 2 ]; then if [ -z "${1:-}" ]; then
echo "Usage: $0 <url> <request_method>" echo "Usage: $0 <url> [request_method]"
exit 1 exit 1
fi fi
URL="$1"
METHOD="$2"
DISABLE_SSL_FILE="disable_peer_validation" DISABLE_SSL_FILE="disable_peer_validation"
REQ_BODY_FILE="curl/req_body.json" REQ_BODY_FILE="curl/req_body.json"
@ -19,39 +16,47 @@ RESP_HEADERS_FILE="curl/resp_headers.txt"
RESP_BODY_RAW_FILE="curl/resp_body.txt" RESP_BODY_RAW_FILE="curl/resp_body.txt"
RESP_BODY_JSON_FILE="curl/resp_body.json" RESP_BODY_JSON_FILE="curl/resp_body.json"
# Append URL search parameters url="$1"
method="${2:-GET}"
# Append url search parameters
if [ -f $REQ_PARAMS_FILE ]; then if [ -f $REQ_PARAMS_FILE ]; then
# Parse each newline as a separate parameter joined by a "&" # Parse each newline as a separate parameter joined by a "&"
PARAMS=$(tr '\n' '&' < "$REQ_PARAMS_FILE" | sed 's/&$//') params=$(tr '\n' '&' < "$REQ_PARAMS_FILE" | sed 's/&$//')
URL="${URL}?${PARAMS}"
if [ -n "$params" ]; then
url="${url}?${params}"
fi
fi fi
# Prepare curl # Prepare curl
CURL_CMD="curl -s" curl_cmd="curl -s"
# Check if SSL peer validation should be disabled # Check if SSL peer validation should be disabled
if [ -f $DISABLE_SSL_FILE ]; then if [ -f $DISABLE_SSL_FILE ]; then
CURL_CMD="$CURL_CMD -k" curl_cmd="$curl_cmd -k"
fi fi
# Add headers from headers.json # Add headers from headers.json
if [ -f $REQ_HEADERS_FILE ]; then if [ -f $REQ_HEADERS_FILE ]; then
# Read headers from the JSON file # Read headers from the JSON file
while IFS= read -r line; do while IFS= read -r line; do
HEADER_NAME=$(echo "$line" | jq -r '.[keys[0]]') header_name=$(echo "$line" | jq -r '.[keys[0]]')
HEADER_VALUE=$(echo "$line" | jq -r '.[keys[1]]') header_value=$(echo "$line" | jq -r '.[keys[1]]')
CURL_CMD="$CURL_CMD -H \"$HEADER_NAME: $HEADER_VALUE\""
curl_cmd="$curl_cmd -H \"$header_name: $header_value\""
done < <(jq -c 'to_entries | .[]' "$REQ_HEADERS_FILE") done < <(jq -c 'to_entries | .[]' "$REQ_HEADERS_FILE")
fi fi
# Add the request method and URL to curl # Add the request method and URL to curl
CURL_CMD="$CURL_CMD -X $METHOD \"$URL\"" curl_cmd="$curl_cmd -X $method \"$url\""
# If the method is not GET, include the payload # If the method is not GET, include the payload
if [ $METHOD != "GET" ]; then if [ $method != "GET" ]; then
if [ -f "$REQ_BODY_FILE" ]; then if [ -f "$REQ_BODY_FILE" ]; then
PAYLOAD=$(<"$REQ_BODY_FILE") payload=$(<"$REQ_BODY_FILE")
CURL_CMD="$CURL_CMD -H \"Content-Type: application/json\" -d '$PAYLOAD'"
curl_cmd="$curl_cmd -H \"Content-Type: application/json\" -d '$payload'"
else else
echo "Error: Payload file '${REQ_BODY_FILE}' not found." echo "Error: Payload file '${REQ_BODY_FILE}' not found."
exit 1 exit 1
@ -59,13 +64,14 @@ if [ $METHOD != "GET" ]; then
fi fi
# Save the response headers and body # Save the response headers and body
CURL_CMD="$CURL_CMD -o $RESP_BODY_RAW_FILE -D $RESP_HEADERS_FILE" curl_cmd="$curl_cmd -o $RESP_BODY_RAW_FILE -D $RESP_HEADERS_FILE"
# Execute curl # Dispatch request
eval "clear" echo -e "\e[0;92mRequest >\e[0m ${method} ${url}"
eval $curl_cmd
echo -e "${METHOD} ${URL}"
eval $CURL_CMD
# Copy the raw respone body to a pretty-printed JSON file # Copy the raw respone body to a pretty-printed JSON file
jq . $RESP_BODY_RAW_FILE > $RESP_BODY_JSON_FILE jq . $RESP_BODY_RAW_FILE > $RESP_BODY_JSON_FILE
# Print the response code
echo -e -n "\e[0;94mResponse <\e[0m "; head -n 1 $RESP_HEADERS_FILE

View file

@ -9,3 +9,5 @@ echo "" > resp_headers.txt
echo "{}" > req_body.json echo "{}" > req_body.json
echo "{}" > resp_body.json echo "{}" > resp_body.json
echo "{}" > req_headers.json echo "{}" > req_headers.json
echo "New configuration created"

82
save.sh Executable file
View file

@ -0,0 +1,82 @@
#!/bin/bash
SAVE_DIR="saved"
main () {
case "$1" in
# Save current config to a named directory
"save")
if [ "$#" -ne 2 ]; then
echo -e "\e[0;91mExpected: ./save.sh save <name>\e[0m"
return 1
fi
local dir="$SAVE_DIR/$2"
mkdir $dir 2>/dev/null
shopt -s nullglob
for file in "curl/req_"*; do
cp -- "$file" $dir
done
shopt -u nullglob
echo "Saved current configuration to: $2"
;;
# Move current config to a named directory
"move")
if [ "$#" -ne 2 ]; then
echo -e "\e[0;91mExpected: ./save.sh move <name>\e[0m"
return 1
fi
# Save config to destination
./save.sh save $2
shopt -s nullglob
for file in "curl/req_"*; do
rm -- "$file"
done
shopt -u nullglob
# Create new empty config
./init.sh
;;
# Load saved config by name from directory
"load")
local dir="$SAVE_DIR/$2"
if [ ! -d $dir ]; then
echo -e "\e[0;91mNo save with name '$2' found\e[0m"
exit 1
fi
# Move existing config to backup directory
./save.sh move ._backup
shopt -s nullglob
for file in "$dir/req_"*; do
cp -- "$file" curl/
done
shopt -u nullglob
echo "Loaded configuration: $2"
;;
"list")
ls -l $SAVE_DIR
;;
*)
echo -e "\e[0;91mExpected: ./save.sh (save|move|load|list)\e[0m"
;;
esac
}
main $1 $2

0
saved/.gitkeep Normal file
View file