Am 23.04.2013 um 21:21 schrieb Sven Van Caekenberghe <sven@stfx.eu>:
Paul,
Well, it is against the spec IMHO: there should be no body with GET or HEAD.
Well, it is a "must not" for HEAD and a "not mentioned at all" for GET. The "should not" use a body for GET is meant that a GET request should only include query parameters or paramterization of a retrieval action. So it is pretty unclear what should be done. I translate the same thing as: A request body for GET request is ok if the body contains only query parameters and does not alter system state (just be idempotent). The same problem goes by "simply" choosing POST for the same request. The interpretation of the URI is different for GET and POST. In case of elasticsearch you really query the entity that is in the URI. For POST it isn't. Norbert
That is why the body is cleared in ZnClient>>#method: in those cases (ZnClient is meant to be reused for multiple requests).
But by using a small detour it is possible:
ZnClient new logToTranscript; url: 'http://zn.stfx.eu/echo'; method: #GET; contents: 'Foobar'; execute.
If you inspect the reply to /echo you will notice that the server acknowledges receiving an entity. This should do the trick.
HTH,
Sven
PS: You can use ZnClient>>#contentWriter: to convert from Smalltalk to JSON automagically...
On 23 Apr 2013, at 21:02, Paul DeBruicker <pdebruic@gmail.com> wrote:
I don't know what should be but if you substitute -XPOST or just -POST for the -XGET then the search fails and you get no results. the -X just forces curl to use the HTTP method that follows.
It does seem to be contrary to the HTTP spec but I'm not sure of that either.
On 04/23/2013 11:52 AM, Camillo Bruni wrote:
I just had a quick peek, shouldn't that be all post requests?
get does not support a body, you have to pass everything as url parameters.
On 2013-04-23, at 20:41, Paul DeBruicker <pdebruic@gmail.com> wrote:
I'm making an elasticsearch client and they utilize JSON bodies in the GET requests to their server to search and do other things. An example of that is the second code block here:
http://www.elasticsearch.org/guide/reference/api/search/
Is there a way to include a body with a GET request using Zinc?
Making this:
ZnClient>>#get:contents: "Execute an HTTP GET request on url with the contents in a body and return the response #contents."
^ self url: url; contents: object; get
(unsurprisingly) doesn't work right away.
In elasticsearch it is possible to make a URI request for searching but it is a more limited interface than including the JSON body.
Thanks
Paul