56

I’m trying to make a request using CURL like this:

curl -X DELETE "https://myhost/context/path/users/OXYugGKg207g5uN/07V" 

where OXYugGKg207g5uN/07V is a hash, so I suppose that I need to encode before do this request.

I have tried curl -X DELETE --data-urlenconded "https://myhost/context/path/users/OXYugGKg207g5uN/07V"

Some ideas?

TRiG
  • 10,148
  • 7
  • 57
  • 107
coffee
  • 3,048
  • 4
  • 32
  • 46

2 Answers2

22

Since you are in a bash environment, you could encode the hash OXYugGKg207g5uN/07V before passing it to curl.

A straight-forward approach would be to use its byte representation %4f%58%59%75%67%47%4b%67%32%30%37%67%35%75%4e%2f%30%37%56

To get that, call:

echo -ne "OXYugGKg207g5uN/07V" | xxd -plain | tr -d '\n' | sed 's/\(..\)/%\1/g'

It will give you: %4f%58%59%75%67%47%4b%67%32%30%37%67%35%75%4e%2f%30%37%56

The complete one-liner including curl in bash/zsh/sh/… would look like this:

curl -X DELETE "https://myhost/context/path/users/$(echo -ne "OXYugGKg207g5uN/07V" | xxd -plain | tr -d '\n' | sed 's/\(..\)/%\1/g')"

and is equivalent to

curl -X DELETE "https://myhost/context/path/users/%4f%58%59%75%67%47%4b%67%32%30%37%67%35%75%4e%2f%30%37%56"

This solution is not very pretty, but it works.
I hope you find this helpful.

wteuber
  • 1,208
  • 9
  • 15
  • Hm, not sure if I understand correctly, what kind of error do you get? `sed 's/\(..\)/%\1/g')` is inside the `$()` evaluation, so escaping parenthesis is required. Without escaping them, sed will throw this error in sh, bash and zsh: `\1 not defined in the RE`. – wteuber Dec 06 '20 at 21:42
  • comment deleted. I was only using the part of the command I needed and missed part of the context. disregard. – Justin Haynes Dec 10 '20 at 00:53
12

If really OXYugGKg207g5uN/07V is the hash then you need to encode that, not the whole url. You can use an encoding function available inside the environment you use cURL in.

arkascha
  • 41,620
  • 7
  • 58
  • 90