[drakma-devel] Error while trying to POST some JSON data
rm at seid-online.de
rm at seid-online.de
Fri Mar 22 16:55:55 UTC 2013
On Fri, Mar 22, 2013 at 12:57:15PM +0000, Peter Stirling wrote:
> I was getting this error too, I reverted to the previous version of cl+ssl
> in quicklisp by putting it in the local-projects directory.
>
> I've been meaning to report another problem I've had with the new version
> of drakma, it seems that when I POST login details to a site that I'm using
> it replies with a redirect,
How is the site redirecting? What's the HTTP status code they use?
> and then drakma tries to POST the login details
> to the redirected page rather than accessing it with a GET. I'll try and
> make a test case sometime this weekend.
Depending on the status code, that's actually valid behaviour.
(see: http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.3.2)
HTH Ralf Mattes
> On 21/03/13 21:41, Peter Kuchta wrote:
>> Hi everybody,
>>
>> I'm trying to POST some JSON data to a web service:
>>
>> (ql:quickload :st-json)
>> (ql:quickload :cl-json)
>> (ql:quickload :drakma)
>>
>> (defvar *rc* (merge-pathnames (user-homedir-pathname) ".apirc"))
>>
>> (defvar *user*
>> (with-open-file (s *rc*)
>> (st-json:read-json s)))
>>
>> (defvar api-url (st-json:getjso "url" *user*))
>> (defvar api-key (st-json:getjso "key" *user*))
>> (defvar api-email (st-json:getjso "email" *user*))
>>
>> (setf drakma:*header-stream* *standard-output*)
>>
>> (defvar *req* '(("dataset" . "tigge")
>> ("step" . "24")
>> ("date" . "20071001")
>> ("time" . "00")
>> ("origin" . "all")))
>>
>> (format t "json:~S~%" (json:encode-json-to-string *req*))
>>
>> (defun retrieve (api request)
>> (let* ((cookie-jar (make-instance 'drakma:cookie-jar))
>> (extra-headers (list (cons "From" api-email)
>> (cons "X-API-KEY" api-key)))
>> (url (concatenate 'string api-url api "/requests"))
>> (stream (drakma:http-request url
>> :additional-headers extra-headers
>> :accept "application/json"
>> :method :post
>> :content-type "application/json"
>> :external-format-out :utf-8
>> :external-format-in :utf-8
>> :redirect 100
>> :cookie-jar cookie-jar
>> :content (json:encode-json-to-string
>> request)
>> :want-stream t)))
>> (st-json:read-json stream)))
>>
>> (retrieve "/datasets/tigge" *req*)
>>
>> Unfortunately, I get an error, although the data seems to be encoded OK to
>> JSON and the headers generated by drakma too, I think. Apparently
>> something is wrong with the :content (the list of integers in the errors
>> message is just the list of ASCII codes of the JSON encoded data).
>>
>> json:"{\"dataset\":\"tigge\",\"step\":\"24\",\"number\":\"all\",\"levtype\":\"sl\",\"date\":\"20071001\",\"time\":\"00\",\"origin\":\"all\",\"type\":\"pf\",\"param\":\"tp\",\"area\":\"70\\/-130\\/30\\/-60\",\"grid\":\"2\\/2\",\"target\":\"data.grib\"}"
>>
>> POST /v1/datasets/tigge/requests HTTP/1.1
>> Host: api.service.int <http://api.service.int>
>> User-Agent: Drakma/1.3.0 (SBCL 1.1.5; Darwin; 12.2.0;
>> http://weitz.de/drakma/)
>> Accept: application/json
>> Connection: close
>> From: me at gmail.com <mailto:me at gmail.com>
>> X-API-KEY: 19a0edb6d8d8dda1e6a3b21223e4f86a
>> Content-Type: application/json
>> Content-Length: 193
>>
>>
>> debugger invoked on a SIMPLE-TYPE-ERROR:
>> The value of CL+SSL::THING is #(123 34 100 97 116 97 115 101 116 34
>> 58 34
>> ...), which is not of type (SIMPLE-ARRAY
>> (UNSIGNED-BYTE 8)
>> (*)).
>>
>> Any idea what's wrong with this code? Many thanks in advance.
>>
>> Best regards,
>> Piotr
>>
>>
>> _______________________________________________
>> drakma-devel mailing list
>> drakma-devel at common-lisp.net
>> http://lists.common-lisp.net/cgi-bin/mailman/listinfo/drakma-devel
>
> _______________________________________________
> drakma-devel mailing list
> drakma-devel at common-lisp.net
> http://lists.common-lisp.net/cgi-bin/mailman/listinfo/drakma-devel
More information about the Drakma-devel
mailing list