Hi
thanks Sven, it now works.
from your answer, I could infer the final solution. Apart from your
suggestions, the content-type: also had to be called on ZnClient and voila!
nicolas
On 02/02/2017 17:11, Sven Van Caekenberghe wrote:
On 2 Feb 2017, at 16:51, Nicolas Anquetil <nicolas.anque...@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
--
Nicolas Anquetil -- MCF (HDR)
Project-Team RMod