[drakma-devel] Error while trying to POST some JSON data

Hans Hübner hans.huebner at gmail.com
Fri Mar 22 16:21:26 UTC 2013


Drakma's behavior with respect to redirects has recently changed so that it
is standard compliant.  I would like to keep it that way, but if this is a
hurdle that can't be worked around, I am open to suggestions to change it
again.

-Hans


On Fri, Mar 22, 2013 at 5:55 PM, <rm at seid-online.de> wrote:

> 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
>
>
> _______________________________________________
> drakma-devel mailing list
> drakma-devel at common-lisp.net
> http://lists.common-lisp.net/cgi-bin/mailman/listinfo/drakma-devel
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mailman.common-lisp.net/pipermail/drakma-devel/attachments/20130322/15183de1/attachment.html>


More information about the Drakma-devel mailing list