Skip to content

QueryParam doesn't conform to HTTP #1626

Open
@cblp

Description

@cblp

Instance HasClient QueryParam' uses this function

encodeQueryParam :: ToHttpApiData a => a  -> BS.ByteString
encodeQueryParam = BL.toStrict . toLazyByteString . toEncodedUrlPiece

where toEncodedUrlPiece is from http-api-data package, where it is documented to be applicable to path segments only, not to query parameters. As a result, if we try to send a simple text string as a parameter,

type API = QueryParam "p" Text

this will be encoded as ?p=a%20+%20b which is wrong, because + is the encoding for the space, and + must be encoded as %2B.

?p=a%20+%20b is interpreted by a standard-conforming server as p = "a b".

p = "a + b" must be encoded as ?p=a+%2B+b

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions