[Pharo-dev] Zinc / REST misunderstanding

Sven Van Caekenberghe sven at stfx.eu
Thu Feb 2 11:11:39 EST 2017


> On 2 Feb 2017, at 16:51, Nicolas Anquetil <nicolas.anquetil at inria.fr> wrote:
> 
> 
> Hi,
> 
> I am trying to create a small Redmine wrapper with Zinc, using Redmine REST API
> 
> And I am having a problem to update issues in redmine from zinc.
> In curl, I can do:
> 
> curl -v -H "Content-Type: application/json" -X PUT --data-binary '{
>   "issue": {
>     "subject": "Subject different changed",
>     "notes": "The subject was changed changed" 
>   }
> }'  -u anquetil:<mypasswd> http://<theserver>/redmine/issues/430.json
> and this updates issue #430 by changing its subject and notes.
> 
> For information, the trace given by curl (-v) is:
> 
> *   Trying <theserver>...
>   % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
>                                  Dload  Upload   Total   Spent    Left  Speed
>   0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0* Connected to <theserver> (<theserver>) port 80 (#0)
> * Server auth using Basic with user 'anquetil'
> > PUT /redmine/issues/430.json HTTP/1.1
> > Host: <theserver>
> > Authorization: Basic YW5xdWV0aWw6UjNkTTFuMy1wYXNz
> > User-Agent: curl/7.47.0
> > Accept: */*
> > Content-Type: application/json
> > Content-Length: 110
> > 
> } [110 bytes data]
> * upload completely sent off: 110 out of 110 bytes
> 100   110    0     0  100   110      0    546 --:--:-- --:--:-- --:--:--   544< HTTP/1.1 200 OK
> < Date: Thu, 02 Feb 2017 12:18:41 GMT
> < Server: Apache/2.2.22 (Ubuntu)
> < X-Powered-By: Phusion Passenger (mod_rails/mod_rack) 3.0.21
> < X-Rack-Cache: invalidate, pass
> < X-Request-Id: 73f75565...
> < X-UA-Compatible: IE=Edge,chrome=1
> < Cache-Control: no-cache
> < X-Runtime: 0.994081
> < Set-Cookie: _redmine_session=BAh7ByIP...; path=/; HttpOnly
> < Set-Cookie: autologin=; path=/; expires=Thu, 01-Jan-1970 00:00:00 GMT
> < Status: 200
> < Content-Length: 0
> < Content-Type: application/json; charset=utf-8
> < 
> 100   110    0     0  100   110      0    105  0:00:01  0:00:01 --:--:--   105
> * Connection #0 to host <theserver> left intact
> The problem is that I cannot replicate that with Zinc:
> 
> cont := '{
>   "issue": {
>     "subject": "Subject different changed",
>     "notes": "The subject was changed changed" 
>   }
> }'.
> ent := ((ZnHeaders requestHeadersFor: 'http://<theserver>/redmine/' asZnUrl )
>     contentType: (ZnMimeType main: 'application' sub: 'json')) ;
>     contentLength: cont size.
>     
> ZnClient new 
>     beOneShot ;
>     entity: ent ;
>     username: 'anquetil' password: '<mypasswd>' ;
>     put: 'http://<theserver>/redmine/issues/430.json' contents: cont ;
>     response.

You are doing something double (ent & cont are the same). Also, I usually start by setting the URL and continue from there. Could you try:

ZnClient new 
    beOneShot ;
    url: 'http://<theserver>/redmine/issues/430.json' ;
    entity: ent ;
    username: 'anquetil' password: '<mypasswd>' ;
    put ;
    yourself.

I would inspect the instance so you can see both the request and response.

Does this work ?

Also, the JSON can be generated from objects instead of being written as a string, but you knew that, right ?

> if I inspect the ZnHeader constructed, it seems to have all headers that curl traces except the Authorization: Basic one:
> 
> <cicgeiiljjcidaam.png>
> 
> The response of ZnClient is "200 OK", with again the same headers as reported by curl
> 
> <mjlnpnjhhegjmhnl.png>
> 
> Yet the issue remains unchanged on the redmine server (contrary to curl evidently)
> 
> Can anyone explain where the error could be ?
> Any help will be gladly welcome
> 
> nicolas
> 
> -- 
> Nicolas Anquetil -- MCF (HDR)
> Project-Team RMod
> 




More information about the Pharo-dev mailing list