On 2 Feb 2017, at 16:51, Nicolas Anquetil <nicolas.anquetil@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