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