I was thinking of a reliable solution. Of course if it only needs to be tested than monkey patching foreign packages is ok.
Norbert > Am 11.06.2015 um 01:22 schrieb PBKResearch <pe...@pbkresearch.co.uk>: > > There is a simpler way than Norbert’s suggestion. Find the class > ZnResourceMetaUtils (in the package Zinc-Resource-Meta-Core). Locate the > class side method #queryKeyValueSafeSet. Remove the comma from the string. > With this change your ‘Google’ example generates the query line with the > ‘%2C’ encoding of the commas. > > Of course, with this change a comma in the value field of a query will always > be encoded. It is not clear to me whether this is correcting an error in > Zinc, or just a hack to solve your problem – earlier posts here endorse both > views. No doubt Sven is the person to sort this out. Meanwhile, this will > enable you to get moving. > > Hope this helps > > Peter Kenny > > From: Pharo-users [mailto:pharo-users-boun...@lists.pharo.org] On Behalf Of > Norbert Hartl > Sent: 10 June 2015 23:56 > To: Pharo users users > Subject: Re: [Pharo-users] ZnClient and percent characters > > Just to clarify: > > "Characters in the "reserved" set are not reserved in all contexts. > The set of characters actually reserved within any given URI > component is defined by that component. In general, a character is > reserved if the semantics of the URI changes if the character is > replaced with its escaped US-ASCII encoding." > If I were you I'd subclass ZnUrl and implement > #encodeQuery:on: > on that class. You could have an extension method in ZnResourceMetaUtils that > returns the character set you need to have encoded. In ZnClient you just set > your ZnUrl derived class object as #url: > Cannot think of anything better for a quick resolve of your problem. > Norbert >> Am 11.06.2015 um 00:26 schrieb Jimmie Houchin <jlhouc...@gmail.com >> <mailto:jlhouc...@gmail.com>>: >> >> I am not an expert on URIs or encoding. However, this is a requirement of >> the API I am using and I am required to submit an encoded URI with %2C and >> no commas. >> >> As far as commas needing to be escaped, it seems from other sources that >> they should be. >> >> From https://www.ietf.org/rfc/rfc2396.txt >> <https://www.ietf.org/rfc/rfc2396.txt> >> >> The plus "+", dollar "$", and comma "," characters have been added to >> those in the "reserved" set, since they are treated as reserved >> within the query component. >> >> States that commas are reserved within the query component. >> >> http://stackoverflow.com/questions/8828702/why-is-the-comma-url-encoded >> <http://stackoverflow.com/questions/8828702/why-is-the-comma-url-encoded> >> >> Regardless of what is or is not required, I do need the ability to have a >> query string with commas encoded as %2C in order to satisfy and use the API >> which states. >> >> fields: Optional An URL encoded (%2C) comma separated list of instrument >> fields that are to be returned in the response. The instrument field will be >> returned regardless of the input to this query parameter. Please see the >> Response Parameters section below for a list of valid values. >> >> Which will look like this or something similar. >> >> fields=displayName%2Cinstrument%2Cpip >> >> >> Thanks. >> >> Jimmie >> >> On 06/10/2015 03:27 PM, Norbert Hartl wrote: >>> That's because the comma does not need to be escaped in the query part of >>> the uri. >>> >>> Norbert >>> >>>> Am 10.06.2015 um 22:00 schrieb Jimmie Houchin <jlhouc...@gmail.com> >>>> <mailto:jlhouc...@gmail.com>: >>>> >>>> On 06/10/2015 10:32 AM, Sven Van Caekenberghe wrote: >>>>>> On 10 Jun 2015, at 17:24, David <stormb...@gmail.com> >>>>>> <mailto:stormb...@gmail.com> wrote: >>>>>> >>>>>> El Wed, 10 Jun 2015 10:14:37 -0500 >>>>>> Jimmie Houchin <jlhouc...@gmail.com> <mailto:jlhouc...@gmail.com> >>>>>> escribió: >>>>>>> Hello, >>>>>>> >>>>>>> I am attempting to use ZnClient to request data. The request requires >>>>>>> a %2C (comma) delimited string as part of the query. Below is a >>>>>>> snippet. >>>>>>> >>>>>>> znClient >>>>>>> addPath: '/v1/instruments'; >>>>>>> queryAt: 'fields' putAll: 'displayName%2Cinstrument%2Cpip'; >>>>>>> get ; >>>>>>> contents) >>>>>>> >>>>>>> The string 'displayName%2Cinstrument%2Cpip' >>>>>>> is being converted to 'displayName%252Cinstrument%252Cpip' >>>>>>> which causes the request to fail. >>>>>>> >>>>>>> The query needs to be >>>>>>> fields=displayName%2Cinstrument%2Cpip >>>>>>> >>>>>>> I have not found how to do this correctly. >>>>>>> Any help greatly appreciated. >>>>>>> >>>>>>> Thanks. >>>>>>> >>>>>>> Jimmie >>>>>>> >>>>>>> >>>>>> Maybe a silly thing, but since %2C = , ... Did you tried already to >>>>>> make itself encode that? Like >>>>>> znClient >>>>>> addPath: '/v1/instruments'; >>>>>> queryAt: 'fields' putAll: 'displayName,instrument,pip'; >>>>>> get ; >>>>>> contents) >>>>>> >>>>>> I suspect it is using encoding internally, that is why % is also >>>>>> encoded if you try to put it. >>>>>> >>>>>> I hope that works >>>>> Not silly and no need to suspect, but absolutely correct ! >>>>> >>>>> Sven >>>> My apologies for not having full disclosure. >>>> >>>> Pharo 4, new image, freshly installed Zinc stable version. >>>> Xubuntu 15.04 >>>> >>>> >>>> >>>> That is what I thought would happen and what I tried first. But it is not >>>> being encoded from what I can find. >>>> >>>> Inspect this in a workspace/playground. >>>> >>>> ZnClient new >>>> https; >>>> host: 'google.com <http://google.com/>'; >>>> addPath: '/commaTest'; >>>> queryAt: 'fields' put: 'displayName,instrument,pip'; >>>> yourself >>>> >>>> View the request / requestLine / uri. The commas are still present in >>>> the URI. >>>> So I tried encoding myself and get the other error. >>>> >>>> Of course Google won't understand this and in this snippet won't receive >>>> it. >>>> >>>> And please let me know if I am doing something wrong. >>>> >>>> Any help greatly appreciated. >>>> >>>> Jimmie