ZnClient and percent characters

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
29 messages Options
12
Reply | Threaded
Open this post in threaded view
|

ZnClient and percent characters

Jimmie Houchin-5
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

Reply | Threaded
Open this post in threaded view
|

Re: ZnClient and percent characters

StormByte
El Wed, 10 Jun 2015 10:14:37 -0500
Jimmie Houchin <[hidden email]>
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



Reply | Threaded
Open this post in threaded view
|

Re: ZnClient and percent characters

Sven Van Caekenberghe-2

> On 10 Jun 2015, at 17:24, David <[hidden email]> wrote:
>
> El Wed, 10 Jun 2015 10:14:37 -0500
> Jimmie Houchin <[hidden email]>
> 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


Reply | Threaded
Open this post in threaded view
|

Re: ZnClient and percent characters

Jimmie Houchin-5


On 06/10/2015 10:32 AM, Sven Van Caekenberghe wrote:

>> On 10 Jun 2015, at 17:24, David <[hidden email]> wrote:
>>
>> El Wed, 10 Jun 2015 10:14:37 -0500
>> Jimmie Houchin <[hidden email]>
>> 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

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';
         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 | Threaded
Open this post in threaded view
|

Re: ZnClient and percent characters

Jimmie Houchin-5
In reply to this post by Sven Van Caekenberghe-2
On 06/10/2015 10:32 AM, Sven Van Caekenberghe wrote:

>> On 10 Jun 2015, at 17:24, David <[hidden email]> wrote:
>>
>> El Wed, 10 Jun 2015 10:14:37 -0500
>> Jimmie Houchin <[hidden email]>
>> 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';
         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 | Threaded
Open this post in threaded view
|

Re: ZnClient and percent characters

NorbertHartl
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 <[hidden email]>:
>
> On 06/10/2015 10:32 AM, Sven Van Caekenberghe wrote:
>>> On 10 Jun 2015, at 17:24, David <[hidden email]> wrote:
>>>
>>> El Wed, 10 Jun 2015 10:14:37 -0500
>>> Jimmie Houchin <[hidden email]>
>>> 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';
>        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 | Threaded
Open this post in threaded view
|

Re: ZnClient and percent characters

Jimmie Houchin-5
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
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

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 [hidden email]:

On 06/10/2015 10:32 AM, Sven Van Caekenberghe wrote:
On 10 Jun 2015, at 17:24, David [hidden email] wrote:

El Wed, 10 Jun 2015 10:14:37 -0500
Jimmie Houchin [hidden email]
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';
       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 | Threaded
Open this post in threaded view
|

Re: ZnClient and percent characters

NorbertHartl
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 <[hidden email]>:

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
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

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 [hidden email]:

On 06/10/2015 10:32 AM, Sven Van Caekenberghe wrote:
On 10 Jun 2015, at 17:24, David [hidden email] wrote:

El Wed, 10 Jun 2015 10:14:37 -0500
Jimmie Houchin [hidden email]
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';
       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 | Threaded
Open this post in threaded view
|

Re: ZnClient and percent characters

Peter Kenny

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:[hidden email]] 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 <[hidden email]>:

 

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

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
 
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 [hidden email]:
 
On 06/10/2015 10:32 AM, Sven Van Caekenberghe wrote:
On 10 Jun 2015, at 17:24, David [hidden email] wrote:
 
El Wed, 10 Jun 2015 10:14:37 -0500
Jimmie Houchin [hidden email]
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';
       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 | Threaded
Open this post in threaded view
|

Re: ZnClient and percent characters

Jimmie Houchin-5
Thanks, that worked great.

That's why I said I am not an expert. I can pull up a page or two. But that doesn't mean I understand all the legal minutiae involved in what is and what isn't legal in an URI or query or path or ...

That is why I noted my requirements regardless of legal minutiae and right or wrong.

Thanks for a practical solution.

Jimmie

On 06/10/2015 06:22 PM, PBKResearch wrote:

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 [[hidden email]] 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 <[hidden email]>:

 

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

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
 
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 [hidden email]:
 
On 06/10/2015 10:32 AM, Sven Van Caekenberghe wrote:
On 10 Jun 2015, at 17:24, David [hidden email] wrote:
 
El Wed, 10 Jun 2015 10:14:37 -0500
Jimmie Houchin [hidden email]
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';
       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 | Threaded
Open this post in threaded view
|

Re: ZnClient and percent characters

Jimmie Houchin-5
In reply to this post by NorbertHartl
Thanks for the reply.

I implemented Peter's suggestion as an easy keep moving solution.

As I said, I am not expert in what is or is not legal according to the standards.
However, looking at Python, their urllib library in the quote and urlencode methods they encode the commas by default.

_ALWAYS_SAFE = frozenset(b'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
                         b'abcdefghijklmnopqrstuvwxyz'
                         b'0123456789'
                         b'_.-')

https://docs.python.org/3/library/urllib.parse.html
https://hg.python.org/cpython/file/3.4/Lib/urllib/parse.py

That's at least how one major language understands the standard. And Python 2.7 is the same.

According to Wikipedia
http://en.wikipedia.org/wiki/Query_string
  • Characters that cannot be converted to the correct charset are replaced with HTML numeric character references[9]
  • SPACE is encoded as '+'
  • Letters (AZ and az), numbers (09) and the characters '*','-','.' and '_' are left as-is

  • It appeared in the stackoverflow article I quoted previously that ASP.NET encodes commas. I could misunderstand or be reading into it.
    http://stackoverflow.com/questions/8828702/why-is-the-comma-url-encoded
    Just a little more information to add to the discussion.

    Thanks.

    Jimmie




    On 06/10/2015 05:56 PM, Norbert Hartl wrote:
    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 <[hidden email]>:

    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
    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
    
    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 [hidden email]:
    
    On 06/10/2015 10:32 AM, Sven Van Caekenberghe wrote:
    
    On 10 Jun 2015, at 17:24, David [hidden email] wrote:
    
    El Wed, 10 Jun 2015 10:14:37 -0500
    Jimmie Houchin [hidden email]
    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';
           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 | Threaded
    Open this post in threaded view
    |

    Re: ZnClient and percent characters

    Sven Van Caekenberghe-2
    @everybody

    The key method that defines how the query part of a URL is percent encoded is ZnMetaResourceUtils class>>#querySafeSet

    Years ago, Zinc HTTP Components followed the better safe than sorry approach of encoding almost every character except for the ones that are safe in all contexts.

    Later on, we began reading the specs better and decided to follow them more closely, that is why there are now different safe sets.

    Now, we can (and should) all read the different specs, and try to learn from things in the wild as well from other implementations.

    The quote from http://en.wikipedia.org/wiki/Query_string was incomplete, it said 'for HTML 5 when submitting a form using GET', which is a very specific context.

    ZnUrl was written against RFC 3986 mostly.

    Now, maybe we made a mistake, maybe not.

    But maybe it also would be a good idea to allow users to decide this for themselves on a case by case basis.

    > On 11 Jun 2015, at 05:18, Jimmie Houchin <[hidden email]> wrote:
    >
    > Thanks for the reply.
    >
    > I implemented Peter's suggestion as an easy keep moving solution.
    >
    > As I said, I am not expert in what is or is not legal according to the standards.
    > However, looking at Python, their urllib library in the quote and urlencode methods they encode the commas by default.
    >
    > _ALWAYS_SAFE = frozenset(b'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
    >                          b'abcdefghijklmnopqrstuvwxyz'
    >                          b'0123456789'
    >                          b'_.-')
    >
    > https://docs.python.org/3/library/urllib.parse.html
    > https://hg.python.org/cpython/file/3.4/Lib/urllib/parse.py
    >
    > That's at least how one major language understands the standard. And Python 2.7 is the same.
    >
    > According to Wikipedia
    > http://en.wikipedia.org/wiki/Query_string
    > • Characters that cannot be converted to the correct charset are replaced with HTML numeric character references[9]
    > • SPACE is encoded as '+'
    > • Letters (A–Z and a–z), numbers (0–9) and the characters '*','-','.' and '_' are left as-is
    >
    > It appeared in the stackoverflow article I quoted previously that ASP.NET encodes commas. I could misunderstand or be reading into it.
    > http://stackoverflow.com/questions/8828702/why-is-the-comma-url-encoded
    > Just a little more information to add to the discussion.
    >
    > Thanks.
    >
    > Jimmie
    >
    >
    >
    >
    > On 06/10/2015 05:56 PM, Norbert Hartl wrote:
    >> 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 <[hidden email]>:
    >>>
    >>> 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
    >>> 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
    >>>
    >>>
    >>> 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 <[hidden email]>
    >>>>> :
    >>>>>
    >>>>> On 06/10/2015 10:32 AM, Sven Van Caekenberghe wrote:
    >>>>>
    >>>>>>> On 10 Jun 2015, at 17:24, David <[hidden email]>
    >>>>>>>  wrote:
    >>>>>>>
    >>>>>>> El Wed, 10 Jun 2015 10:14:37 -0500
    >>>>>>> Jimmie Houchin
    >>>>>>> <[hidden email]>
    >>>>>>>
    >>>>>>> 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
    >>>>> ';
    >>>>>        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 | Threaded
    Open this post in threaded view
    |

    Re: ZnClient and percent characters

    NorbertHartl
    In reply to this post by 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 <[hidden email]>:

    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 [[hidden email]] 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 <[hidden email]>:
     
    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

    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
     
    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 [hidden email]:
     
    On 06/10/2015 10:32 AM, Sven Van Caekenberghe wrote:
    On 10 Jun 2015, at 17:24, David [hidden email] wrote:
     
    El Wed, 10 Jun 2015 10:14:37 -0500
    Jimmie Houchin [hidden email]
    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';
           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 | Threaded
    Open this post in threaded view
    |

    Re: ZnClient and percent characters

    Peter Kenny

    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 <[hidden email]>:

     

    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 [[hidden email]] 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 <[hidden email]>:

     

    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


    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
     
    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 [hidden email]:
     
    On 06/10/2015 10:32 AM, Sven Van Caekenberghe wrote:
    On 10 Jun 2015, at 17:24, David [hidden email] wrote:
     
    El Wed, 10 Jun 2015 10:14:37 -0500
    Jimmie Houchin [hidden email]
    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';
           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 | Threaded
    Open this post in threaded view
    |

    Re: ZnClient and percent characters

    Henrik Sperre Johansen

    On 11 Jun 2015, at 9:51 , PBKResearch <[hidden email]> wrote:

    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. 

    It's a phrase to describe the change: http://en.wikipedia.org/wiki/Monkey_patch
    I think Ruby popularized it, the phrase I was familiar with in a Smalltalk context was "method override"

    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

    The problem with overrides of methods in an external librarey arise when:
    - Other packages you load depend on the same method being monkey patched in a different way way.
    - Bug fixes/Refactorings in the base library renders the change incorrect/obsolete, which can be hard to notice. *

    Subclassing and adding your modifications there instead "solves" the first problem.
    Reading the specs, determining the original behaviour is a bug, submitting a fix, and have it accepted in the base library instead fixes both.

    Cheers,
    Henry

    * For instance, in my day job maintaining a VW application, when upgrading to new versions, verifying that all monkey patches are still correct accounts for a significant portion of the time spent
    Reply | Threaded
    Open this post in threaded view
    |

    Re: ZnClient and percent characters

    Peter Kenny
    In reply to this post by Sven Van Caekenberghe-2
    Sven

    As I read the code, there are two methods in ZnMetaResourceUtils class which specify percent encoding of queries, #queryKeyValueSafeSet and #querySafeSet. The first is used in encoding the (key, value) pairs, the second in encoding the fragment after the #. It is not clear whether we need separate safe sets for the two cases, but in any case the first one was obviously the one to change to fix Jimmie's original problem.

    Having been accused of monkeying with your code in an unreliable way, I shall keep my head down in future. It's a pity - I find it quite enjoyable trying to help people, and trying to prove that my elderly brain is not completely addled.

    Peter Kenny

    -----Original Message-----
    From: Pharo-users [mailto:[hidden email]] On Behalf Of Sven Van Caekenberghe
    Sent: 11 June 2015 07:35
    To: Any question about pharo is welcome
    Subject: Re: [Pharo-users] ZnClient and percent characters

    @everybody

    The key method that defines how the query part of a URL is percent encoded is ZnMetaResourceUtils class>>#querySafeSet

    Years ago, Zinc HTTP Components followed the better safe than sorry approach of encoding almost every character except for the ones that are safe in all contexts.

    Later on, we began reading the specs better and decided to follow them more closely, that is why there are now different safe sets.

    Now, we can (and should) all read the different specs, and try to learn from things in the wild as well from other implementations.

    The quote from http://en.wikipedia.org/wiki/Query_string was incomplete, it said 'for HTML 5 when submitting a form using GET', which is a very specific context.

    ZnUrl was written against RFC 3986 mostly.

    Now, maybe we made a mistake, maybe not.

    But maybe it also would be a good idea to allow users to decide this for themselves on a case by case basis.

    > On 11 Jun 2015, at 05:18, Jimmie Houchin <[hidden email]> wrote:
    >
    > Thanks for the reply.
    >
    > I implemented Peter's suggestion as an easy keep moving solution.
    >
    > As I said, I am not expert in what is or is not legal according to the standards.
    > However, looking at Python, their urllib library in the quote and urlencode methods they encode the commas by default.
    >
    > _ALWAYS_SAFE = frozenset(b'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
    >                          b'abcdefghijklmnopqrstuvwxyz'
    >                          b'0123456789'
    >                          b'_.-')
    >
    > https://docs.python.org/3/library/urllib.parse.html
    > https://hg.python.org/cpython/file/3.4/Lib/urllib/parse.py
    >
    > That's at least how one major language understands the standard. And Python 2.7 is the same.
    >
    > According to Wikipedia
    > http://en.wikipedia.org/wiki/Query_string
    > • Characters that cannot be converted to the correct charset are
    > replaced with HTML numeric character references[9] • SPACE is encoded as '+'
    > • Letters (A–Z and a–z), numbers (0–9) and the characters '*','-','.'
    > and '_' are left as-is
    >
    > It appeared in the stackoverflow article I quoted previously that ASP.NET encodes commas. I could misunderstand or be reading into it.
    > http://stackoverflow.com/questions/8828702/why-is-the-comma-url-encode
    > d Just a little more information to add to the discussion.
    >
    > Thanks.
    >
    > Jimmie
    >
    >
    >
    >
    > On 06/10/2015 05:56 PM, Norbert Hartl wrote:
    >> 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 <[hidden email]>:
    >>>
    >>> 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
    >>> 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-enco
    >>> ded
    >>>
    >>>
    >>> 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
    >>>>> <[hidden email]>
    >>>>> :
    >>>>>
    >>>>> On 06/10/2015 10:32 AM, Sven Van Caekenberghe wrote:
    >>>>>
    >>>>>>> On 10 Jun 2015, at 17:24, David <[hidden email]>
    >>>>>>>  wrote:
    >>>>>>>
    >>>>>>> El Wed, 10 Jun 2015 10:14:37 -0500 Jimmie Houchin
    >>>>>>> <[hidden email]>
    >>>>>>>
    >>>>>>> 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
    >>>>> ';
    >>>>>        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 | Threaded
    Open this post in threaded view
    |

    Re: ZnClient and percent characters

    NorbertHartl
    In reply to this post by Peter Kenny
    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 <[hidden email]>:

    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 <[hidden email]>:
     
    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 [[hidden email]] 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 <[hidden email]>:
     
    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


    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
     
    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 [hidden email]:
     
    On 06/10/2015 10:32 AM, Sven Van Caekenberghe wrote:
    On 10 Jun 2015, at 17:24, David [hidden email] wrote:
     
    El Wed, 10 Jun 2015 10:14:37 -0500
    Jimmie Houchin [hidden email]
    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';
           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 | Threaded
    Open this post in threaded view
    |

    Re: ZnClient and percent characters

    Jimmie Houchin-5
    In reply to this post by Sven Van Caekenberghe-2
    This is exactly why I expressly state I am not a language lawyer and
    explicitly do not know what is and is not expressly forbidden or allowed
    with regards to a comma.

    You are correct about the Wikipedia article.

    Is it every wrong or illegal to use a complete safely encoded request?
    Is it just simply not required?
    So not fully encoded is still valid and legal and also the fully encode
    is also fully valid and legal.

    eg:
    http://yourserver.com/path?options=eggs,toast,coffee
    is fully valid and legal, but may encounter problems depending to whom
    the request is made and their implementation?
    Encoding is not required but is at the discretion of the server
    implementation?

    http://yourserver.com/path?options=eggs%2Ctoast%2Ccoffee
    is fully valid and legal and is always usable and will never encounter
    problems?
    All valid server side implementations will handle this properly?

    Since I am sure that the API that I am writing for is probably not the
    only server implementation which requires the comma to be encoded. And
    regardless of legality of the use of comma it appears that some
    implementers are on the "to be safe we encode everything" side of
    things. It would be nice to have some option which allows us to encode
    all to be safe option.

    Thanks for listening and your help.

    Jimmie




    On 06/11/2015 01:35 AM, Sven Van Caekenberghe wrote:

    > @everybody
    >
    > The key method that defines how the query part of a URL is percent encoded is ZnMetaResourceUtils class>>#querySafeSet
    >
    > Years ago, Zinc HTTP Components followed the better safe than sorry approach of encoding almost every character except for the ones that are safe in all contexts.
    >
    > Later on, we began reading the specs better and decided to follow them more closely, that is why there are now different safe sets.
    >
    > Now, we can (and should) all read the different specs, and try to learn from things in the wild as well from other implementations.
    >
    > The quote from http://en.wikipedia.org/wiki/Query_string was incomplete, it said 'for HTML 5 when submitting a form using GET', which is a very specific context.
    >
    > ZnUrl was written against RFC 3986 mostly.
    >
    > Now, maybe we made a mistake, maybe not.
    >
    > But maybe it also would be a good idea to allow users to decide this for themselves on a case by case basis.
    >
    >> On 11 Jun 2015, at 05:18, Jimmie Houchin <[hidden email]> wrote:
    >>
    >> Thanks for the reply.
    >>
    >> I implemented Peter's suggestion as an easy keep moving solution.
    >>
    >> As I said, I am not expert in what is or is not legal according to the standards.
    >> However, looking at Python, their urllib library in the quote and urlencode methods they encode the commas by default.
    >>
    >> _ALWAYS_SAFE = frozenset(b'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
    >>                           b'abcdefghijklmnopqrstuvwxyz'
    >>                           b'0123456789'
    >>                           b'_.-')
    >>
    >> https://docs.python.org/3/library/urllib.parse.html
    >> https://hg.python.org/cpython/file/3.4/Lib/urllib/parse.py
    >>
    >> That's at least how one major language understands the standard. And Python 2.7 is the same.
    >>
    >> According to Wikipedia
    >> http://en.wikipedia.org/wiki/Query_string
    >> • Characters that cannot be converted to the correct charset are replaced with HTML numeric character references[9]
    >> • SPACE is encoded as '+'
    >> • Letters (A–Z and a–z), numbers (0–9) and the characters '*','-','.' and '_' are left as-is
    >>
    >> It appeared in the stackoverflow article I quoted previously that ASP.NET encodes commas. I could misunderstand or be reading into it.
    >> http://stackoverflow.com/questions/8828702/why-is-the-comma-url-encoded
    >> Just a little more information to add to the discussion.
    >>
    >> Thanks.
    >>
    >> Jimmie
    >>
    >>
    >>
    >>
    >> On 06/10/2015 05:56 PM, Norbert Hartl wrote:
    >>> 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 <[hidden email]>:
    >>>>
    >>>> 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
    >>>> 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
    >>>>
    >>>>
    >>>> 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 <[hidden email]>
    >>>>>> :
    >>>>>>
    >>>>>> On 06/10/2015 10:32 AM, Sven Van Caekenberghe wrote:
    >>>>>>
    >>>>>>>> On 10 Jun 2015, at 17:24, David <[hidden email]>
    >>>>>>>>   wrote:
    >>>>>>>>
    >>>>>>>> El Wed, 10 Jun 2015 10:14:37 -0500
    >>>>>>>> Jimmie Houchin
    >>>>>>>> <[hidden email]>
    >>>>>>>>
    >>>>>>>> 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
    >>>>>> ';
    >>>>>>         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 | Threaded
    Open this post in threaded view
    |

    Re: ZnClient and percent characters

    Sven Van Caekenberghe-2
    In reply to this post by Sven Van Caekenberghe-2

    > On 11 Jun 2015, at 08:35, Sven Van Caekenberghe <[hidden email]> wrote:
    >
    > @everybody
    >
    > The key method that defines how the query part of a URL is percent encoded is ZnMetaResourceUtils class>>#querySafeSet
    >
    > Years ago, Zinc HTTP Components followed the better safe than sorry approach of encoding almost every character except for the ones that are safe in all contexts.
    >
    > Later on, we began reading the specs better and decided to follow them more closely, that is why there are now different safe sets.
    >
    > Now, we can (and should) all read the different specs, and try to learn from things in the wild as well from other implementations.
    >
    > The quote from http://en.wikipedia.org/wiki/Query_string was incomplete, it said 'for HTML 5 when submitting a form using GET', which is a very specific context.
    >
    > ZnUrl was written against RFC 3986 mostly.
    >
    > Now, maybe we made a mistake, maybe not.

    I looked into this a bit more, and I am confused.

    My most strict reading of RFC 3986 (which obsoletes RFC 2396) says in section 3.4 Query:

    query       = *( pchar / "/" / "?" )

    where

    pchar       = unreserved / pct-encoded / sub-delims / ":" / "@"
    unreserved  = ALPHA / DIGIT / "-" / "." / "_" / "~"
    sub-delims  = "!" / "$" / "&" / "'" / "(" / ")"
                      / "*" / "+" / "," / ";" / "="

    which I understand to allow ,

    The description above is what is in ZnMetaResourceUtils class>>#querySafeSet which the noted exceptions (=, & and + because we interpret the query as key-value pairs).

    In http://www.w3.org/Addressing/URL/uri-spec.html is read the same.

    That being said, there are counter examples, like when you search for foo,bar in Google using Google Chrome, which then results in the URL:

    https://www.google.be/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=foo%2Cbar

    Or when you do

    $ curl -G -v --data-urlencode "foo=one,two" "http://zn.stfx.eu/echo?q=1,2,3&x=a,b"
    * Hostname was NOT found in DNS cache
    *   Trying 46.137.113.215...
    * Connected to zn.stfx.eu (46.137.113.215) port 80 (#0)
    > GET /echo?q=1,2,3&x=a,b&foo=one%2Ctwo HTTP/1.1
    > User-Agent: curl/7.37.1
    > Host: zn.stfx.eu
    > Accept: */*
    >
    < HTTP/1.1 200 OK
    < Date: Thu, 11 Jun 2015 14:23:06 GMT
    * Server Zinc HTTP Components 1.0 is not blacklisted
    < Server: Zinc HTTP Components 1.0
    < Content-Type: text/plain;charset=utf-8
    < Content-Length: 421
    < Vary: Accept-Encoding
    <
    This is Zinc HTTP Components echoing your request !
    Running a ZnManagingMultiThreadedServer(running 8083)
    GET request for /echo?q=1,2,3&x=a,b&foo=one,two
    with headers
     X-Forwarded-Server: ip-10-226-6-28.eu-west-1.compute.internal
     X-Forwarded-Host: zn.stfx.eu
     X-Zinc-Remote-Address: 127.0.0.1
     User-Agent: curl/7.37.1
     Host: localhost:8083
     Connection: Keep-Alive
     Accept: */*
     X-Forwarded-For: 81.83.7.35

    * Connection #0 to host zn.stfx.eu left intact

    Reading about JavaScripts' encodeURI and encodeURIComponent functions does not help either (the first one keeps the comma, the latter one encodes it).

    I know there are some other people on this list that might have an opinion, so let's try to figure this out together.

    > But maybe it also would be a good idea to allow users to decide this for themselves on a case by case basis.
    >
    >> On 11 Jun 2015, at 05:18, Jimmie Houchin <[hidden email]> wrote:
    >>
    >> Thanks for the reply.
    >>
    >> I implemented Peter's suggestion as an easy keep moving solution.
    >>
    >> As I said, I am not expert in what is or is not legal according to the standards.
    >> However, looking at Python, their urllib library in the quote and urlencode methods they encode the commas by default.
    >>
    >> _ALWAYS_SAFE = frozenset(b'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
    >>                         b'abcdefghijklmnopqrstuvwxyz'
    >>                         b'0123456789'
    >>                         b'_.-')
    >>
    >> https://docs.python.org/3/library/urllib.parse.html
    >> https://hg.python.org/cpython/file/3.4/Lib/urllib/parse.py
    >>
    >> That's at least how one major language understands the standard. And Python 2.7 is the same.
    >>
    >> According to Wikipedia
    >> http://en.wikipedia.org/wiki/Query_string
    >> • Characters that cannot be converted to the correct charset are replaced with HTML numeric character references[9]
    >> • SPACE is encoded as '+'
    >> • Letters (A–Z and a–z), numbers (0–9) and the characters '*','-','.' and '_' are left as-is
    >>
    >> It appeared in the stackoverflow article I quoted previously that ASP.NET encodes commas. I could misunderstand or be reading into it.
    >> http://stackoverflow.com/questions/8828702/why-is-the-comma-url-encoded
    >> Just a little more information to add to the discussion.
    >>
    >> Thanks.
    >>
    >> Jimmie
    >>
    >>
    >>
    >>
    >> On 06/10/2015 05:56 PM, Norbert Hartl wrote:
    >>> 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 <[hidden email]>:
    >>>>
    >>>> 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
    >>>> 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
    >>>>
    >>>>
    >>>> 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 <[hidden email]>
    >>>>>> :
    >>>>>>
    >>>>>> On 06/10/2015 10:32 AM, Sven Van Caekenberghe wrote:
    >>>>>>
    >>>>>>>> On 10 Jun 2015, at 17:24, David <[hidden email]>
    >>>>>>>> wrote:
    >>>>>>>>
    >>>>>>>> El Wed, 10 Jun 2015 10:14:37 -0500
    >>>>>>>> Jimmie Houchin
    >>>>>>>> <[hidden email]>
    >>>>>>>>
    >>>>>>>> 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
    >>>>>> ';
    >>>>>>       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 | Threaded
    Open this post in threaded view
    |

    Re: ZnClient and percent characters

    Sven Van Caekenberghe-2
    In reply to this post by Jimmie Houchin-5
    Here is one older discussion that let to Zn going away from the better safe than sorry approach to encoding:

    http://forum.world.st/Zinc-How-to-use-the-character-in-an-URL-td4716386.html#a4716459

    You have to read it up to the end.

    > On 11 Jun 2015, at 16:19, Jimmie Houchin <[hidden email]> wrote:
    >
    > This is exactly why I expressly state I am not a language lawyer and explicitly do not know what is and is not expressly forbidden or allowed with regards to a comma.
    >
    > You are correct about the Wikipedia article.
    >
    > Is it every wrong or illegal to use a complete safely encoded request? Is it just simply not required?
    > So not fully encoded is still valid and legal and also the fully encode is also fully valid and legal.

    Yes, any server should accept all encodings.

    However, the following are different:

    http://foo.com/bar?x=1

    http://foo.com/bar?x%3D1

    In the second case, you take away the meaning of = by encoding it. So you just can't encode everything everywhere.

    > eg:
    > http://yourserver.com/path?options=eggs,toast,coffee
    > is fully valid and legal, but may encounter problems depending to whom the request is made and their implementation?
    > Encoding is not required but is at the discretion of the server implementation?
    >
    > http://yourserver.com/path?options=eggs%2Ctoast%2Ccoffee
    > is fully valid and legal and is always usable and will never encounter problems?
    > All valid server side implementations will handle this properly?
    >
    > Since I am sure that the API that I am writing for is probably not the only server implementation which requires the comma to be encoded.

    Actually, this is the first time I hear of a problem with ,

    So, from that perspective, the server might be in error.

    > And regardless of legality of the use of comma it appears that some implementers are on the "to be safe we encode everything" side of things. It would be nice to have some option which allows us to encode all to be safe option.

    Yes, maybe such an option would be good, but only if it is really needed.

    > Thanks for listening and your help.
    >
    > Jimmie
    >
    >
    >
    >
    > On 06/11/2015 01:35 AM, Sven Van Caekenberghe wrote:
    >> @everybody
    >>
    >> The key method that defines how the query part of a URL is percent encoded is ZnMetaResourceUtils class>>#querySafeSet
    >>
    >> Years ago, Zinc HTTP Components followed the better safe than sorry approach of encoding almost every character except for the ones that are safe in all contexts.
    >>
    >> Later on, we began reading the specs better and decided to follow them more closely, that is why there are now different safe sets.
    >>
    >> Now, we can (and should) all read the different specs, and try to learn from things in the wild as well from other implementations.
    >>
    >> The quote from http://en.wikipedia.org/wiki/Query_string was incomplete, it said 'for HTML 5 when submitting a form using GET', which is a very specific context.
    >>
    >> ZnUrl was written against RFC 3986 mostly.
    >>
    >> Now, maybe we made a mistake, maybe not.
    >>
    >> But maybe it also would be a good idea to allow users to decide this for themselves on a case by case basis.
    >>
    >>> On 11 Jun 2015, at 05:18, Jimmie Houchin <[hidden email]> wrote:
    >>>
    >>> Thanks for the reply.
    >>>
    >>> I implemented Peter's suggestion as an easy keep moving solution.
    >>>
    >>> As I said, I am not expert in what is or is not legal according to the standards.
    >>> However, looking at Python, their urllib library in the quote and urlencode methods they encode the commas by default.
    >>>
    >>> _ALWAYS_SAFE = frozenset(b'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
    >>>                          b'abcdefghijklmnopqrstuvwxyz'
    >>>                          b'0123456789'
    >>>                          b'_.-')
    >>>
    >>> https://docs.python.org/3/library/urllib.parse.html
    >>> https://hg.python.org/cpython/file/3.4/Lib/urllib/parse.py
    >>>
    >>> That's at least how one major language understands the standard. And Python 2.7 is the same.
    >>>
    >>> According to Wikipedia
    >>> http://en.wikipedia.org/wiki/Query_string
    >>> • Characters that cannot be converted to the correct charset are replaced with HTML numeric character references[9]
    >>> • SPACE is encoded as '+'
    >>> • Letters (A–Z and a–z), numbers (0–9) and the characters '*','-','.' and '_' are left as-is
    >>>
    >>> It appeared in the stackoverflow article I quoted previously that ASP.NET encodes commas. I could misunderstand or be reading into it.
    >>> http://stackoverflow.com/questions/8828702/why-is-the-comma-url-encoded
    >>> Just a little more information to add to the discussion.
    >>>
    >>> Thanks.
    >>>
    >>> Jimmie
    >>>
    >>>
    >>>
    >>>
    >>> On 06/10/2015 05:56 PM, Norbert Hartl wrote:
    >>>> 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 <[hidden email]>:
    >>>>>
    >>>>> 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
    >>>>> 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
    >>>>>
    >>>>>
    >>>>> 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 <[hidden email]>
    >>>>>>> :
    >>>>>>>
    >>>>>>> On 06/10/2015 10:32 AM, Sven Van Caekenberghe wrote:
    >>>>>>>
    >>>>>>>>> On 10 Jun 2015, at 17:24, David <[hidden email]>
    >>>>>>>>>  wrote:
    >>>>>>>>>
    >>>>>>>>> El Wed, 10 Jun 2015 10:14:37 -0500
    >>>>>>>>> Jimmie Houchin
    >>>>>>>>> <[hidden email]>
    >>>>>>>>>
    >>>>>>>>> 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
    >>>>>>> ';
    >>>>>>>        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
    >>>>>>>
    >>>>>>>
    >>>>>>>
    >>>>>>>
    >>
    >
    >


    12