No offense meant. I assumed you would know the term. Sorry! Henry explained it 
quite good what I meant.

Norbert

> Am 11.06.2015 um 09:51 schrieb PBKResearch <pe...@pbkresearch.co.uk>:
> 
> I don’t quite understand Norbert’s comment. Does ‘monkey’ apply to me or to 
> what I have done? Either way, it seems unnecessary and abusive. 
>  
> Thanks to Sven’s careful use of informative method names, the effect of my 
> change is quite clear. Any comma in the value part of a query line will be 
> encoded. Nothing else. I did my best to trace any side effects, and didn’t 
> find any. What is not ‘reliable’ about that?
>  
> Peter Kenny
>  
>  
> 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 
>> <mailto: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 
>> <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

Reply via email to