Decoding x-www-form-urlencoded

I’m looking for a library that helps decoding application/x-www-form-urlencoded data as it is received by a web server. I assumed that it would be provided by a package like cohttp but could not find it at first glance. Maybe this is known under a different name. It is not difficult to write a decoder but I would simply prefer a battle-hardened one.

token=gIkuvaNzQIHg97ATvDxqgjtO
&team_id=T0001
&team_domain=example
&enterprise_id=E0001
&enterprise_name=Globular%20Construct%20Inc
&channel_id=C2147483705
&channel_name=test
&user_id=U2147483697
&user_name=Steve
&command=/weather
&text=94070
&response_url=https://hooks.slack.com/commands/1234/5678
&trigger_id=13345224609.738474920.8088930838d88f008e0
1 Like

Uri: val pct_decode : string → string

The signature for Uri.pct_decode suggests it doesn’t decode forms because the result should be an association. Maybe this?

Uri.query_of_encoded : string -> (string * string list) list

utop # Uri.query_of_encoded req;;
- : (string * string list) list =
[("token", ["gIkuvaNzQIHg97ATvDxqgjtO"]); ("team_id", ["T0001"]);
 ("team_domain", ["example"]); ("enterprise_id", ["E0001"]);
 ("enterprise_name", ["Globular Construct Inc"]);
 ("channel_id", ["C2147483705"]); ("channel_name", ["test"]);
 ("user_id", ["U2147483697"]); ("user_name", ["Steve"]);
 ("command", ["/weather"]); ("text", ["94070"]);
 ("response_url", ["https://hooks.slack.com/commands/1234/5678"]);
 ("trigger_id", ["13345224609.738474920.8088930838d88f008e0"])]

The name query_of_encoded is unfortunate in that it doesn’t conveys that it is decoding something.

2 Likes

https://github.com/ahrefs/atd/pull/194

You might be interested by this. Sorry can’t check that it gives exactly the good leads right now.

1 Like