* bug#6407: URL: error when handling redirects
@ 2010-06-11 19:38 David Reitter
2012-10-13 9:38 ` Chong Yidong
0 siblings, 1 reply; 2+ messages in thread
From: David Reitter @ 2010-06-11 19:38 UTC (permalink / raw)
To: 6407
A simple call to `url-http' results in an error when handling a certain kind of redirect.
The call would be
(url-http url 'foo-function (list t )))
and the trace, the HTTP buffer and a partial explanation of the problem follow below:
===========
Debugger entered--Lisp error: (wrong-type-argument listp t)
car(t)
(eq (car events) :redirect)
(if (eq (car events) :redirect) (setq old-redirects (1+ old-redirects)))
(while events (if (eq ... :redirect) (setq old-redirects ...)) (and (setq events ...) (setq events ...)))
(let ((events ...) (old-redirects 0)) (while events (if ... ...) (and ... ...)) (< old-redirects url-max-redirections))
(and (> url-max-redirections 0) (let (... ...) (while events ... ...) (< old-redirects url-max-redirections)))
(or (< url-max-redirections 0) (and (> url-max-redirections 0) (let ... ... ...)))
(if (or (< url-max-redirections 0) (and ... ...)) (progn (setf ... ...) (set ... ...) (url-mark-buffer-as-dead buffer)) (url-http-debug "Maximum redirections reached") (setf (car url-callback-arguments) (nconc ... ...)) (setq success t))
(let ((url-request-method url-http-method) (url-request-data url-http-data) (url-request-extra-headers url-http-extra-headers)) (if (or ... ...) (progn ... ... ...) (url-http-debug "Maximum redirections reached") (setf ... ...) (setq success t)))
(progn (if (string-match "\\([^ ]+\\)[ ]" redirect-uri) (setq redirect-uri ...)) (if (string-match "^<\\(.*\\)>$" redirect-uri) (setq redirect-uri ...)) (if (not ...) (setq redirect-uri ...)) (let (... ... ...) (if ... ... ... ... ...)))
(if redirect-uri (progn (if ... ...) (if ... ...) (if ... ...) (let ... ...)))
(when redirect-uri (if (string-match "\\([^ ]+\\)[ ]" redirect-uri) (setq redirect-uri ...)) (if (string-match "^<\\(.*\\)>$" redirect-uri) (setq redirect-uri ...)) (if (not ...) (setq redirect-uri ...)) (let (... ... ...) (if ... ... ... ... ...)))
(let ((redirect-uri ...)) (case url-http-response-status (300 nil) (... ...) (303 ...) (304 ... ... ...) (305 ...) (otherwise nil)) (when redirect-uri (if ... ...) (if ... ...) (if ... ...) (let ... ...)))
(cond ((eql class ...) (url-mark-buffer-as-dead buffer) (error "HTTP responses in class 1xx not supported (%d)" url-http-response-status)) ((eql class ...) (case url-http-response-status ... ...)) ((eql class ...) (let ... ... ...)) ((eql class ...) (case url-http-response-status ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...) (when success ...)) ((eql class ...) (setq success t) (case url-http-response-status ... ... ... ... ... ...) (when success ...)) (t (error "Unknown class of HTTP response code: %d (%d)" class url-http-response-status)))
(case class (1 (url-mark-buffer-as-dead buffer) (error "HTTP responses in class 1xx not supported (%d)" url-http-response-status)) (2 (case url-http-response-status ... ...)) (3 (let ... ... ...)) (4 (case url-http-response-status ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...) (when success ...)) (5 (setq success t) (case url-http-response-status ... ... ... ... ... ...) (when success ...)) (otherwise (error "Unknown class of HTTP response code: %d (%d)" class url-http-response-status)))
(let ((buffer ...) (class nil) (success nil)) (setq class (/ url-http-response-status 100)) (url-http-debug "Parsed HTTP headers: class=%d status=%d" class url-http-response-status) (url-http-handle-cookies) (case class (1 ... ...) (2 ...) (3 ...) (4 ... ...) (5 ... ... ...) (otherwise ...)) (if (not success) (url-mark-buffer-as-dead buffer)) (url-http-debug "Finished parsing HTTP headers: %S" success) (widen) success)
url-http-parse-headers()
url-http-content-length-after-change-function(434 1327 893)
url-http-wait-for-headers-change-function(1 1327 1326)
url-http-generic-filter(#<process aquamacs.org> "HTTP/1.0 302 RD
\nLocation: http://utility.loganwifi.com/port-redirectDAZ7.asp?UI=01f981&NI=0050e801f981&UIP=192.168.1.10&MA=58B0357F2DA0&RN=898&PORT=898&RAD=yes&TUN=no&CC=no&PMS=no&OS=http://aquamacs.org%2Fcgi-bin%2Fcurrentversion.cgi%3Fsess%3D237567792%26seq%3D3138%26beta%3D1%26ver%3D2.0a%26vbt%3D2010-06-10%26obof%3D0%26tab%3D1%26gssm%3D0%26tgssm%3D1%26ssm%3D0%26mm%3Demacs-lisp-mode%26os%3D10.3.1%26cpu%3Di386
\nContent-Length: 888
\n
\n<HTML>\n<!--access procedure=nx.1-->\n<!--ndxid=01f981-->\n<!--protocol=https-->\n<!--ndxhost=nomadprime.subscribe.loganwifi.com-->\n<!--ndxport=1112-->\n<!--<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<WISPAccessGatewayParam\nxmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\nxsi:noNamespaceSchemaLocation=\"http://www.acmewisp.com/WISPAccessGatewayParam.xsd\">\n<Proxy>\n<MessageType>110</MessageType>\n<ResponseCode>200</ResponseCode>\n<NextURL><![CDATA[http://utility.loganwifi.com/port-redirectDAZ7.asp?UI=01f981&NI=0050e801f981&UIP=192.168.1.10&MA=58B0357F2DA0&RN=898&PORT=898&RAD=yes&TUN=no&CC=no&PMS=no&OS=http://aquamacs.org%2Fcgi-bin%2Fcurrentversion.cgi%3Fsess%3D237567792%26seq%3D3138%26beta%3D1%26ver%3D2.0a%26vbt%3D2010-06-10%26obof%3D0%26tab%3D1%26gssm%3D0%26tgssm%3D1%26ssm%3D0%26mm%3Demacs-lisp-mode%26os%3D10.3.1%26cpu%3Di386]]></NextURL>\n</Proxy>\n</WISPAccessGatewayParam>-->\n</HTML>")
execute-extended-command(nil)
call-interactively(execute-extended-command nil nil)
==================
The " *url...*" buffer looks like this:
HTTP/1.0 302 RD
Location: http://utility.loganwifi.com/port-redirectDAZ7.asp?UI=01f981&NI=0050e801f981&UIP=192.168.1.10&MA=58B0357F2DA0&RN=898&PORT=898&RAD=yes&TUN=no&CC=no&PMS=no&OS=http://aquamacs.org%2Fcgi-bin%2Ftruncated.cgi
Content-Length: 888
=====
In parse-http-headers, redirect-uri is set (an correct), but code like the following seems to expect something special in url-callback-arguments:
;; Check existing number of redirects
(if (or (< url-max-redirections 0)
(and (> url-max-redirections 0)
(let ((events (car url-callback-arguments))
(old-redirects 0))
(while events
(if (eq (car events) :redirect)
(setq old-redirects (1+ old-redirects)))
(and (setq events (cdr events))
(setq events (cdr events))))
(< old-redirects url-max-redirections))))
My `url-callback-arguments' here is just the callback args list that was originally used for the url-http request as above.
I am unable to replicate due to a lack of redirecting Wifi network. This happened at Logan airport, before signing in for the Wifi, and I reproduced the error many times (didn't get it to work at all). I ran it in Aquamacs 2.0, i.e., Emacs 23.
^ permalink raw reply [flat|nested] 2+ messages in thread
* bug#6407: URL: error when handling redirects
2010-06-11 19:38 bug#6407: URL: error when handling redirects David Reitter
@ 2012-10-13 9:38 ` Chong Yidong
0 siblings, 0 replies; 2+ messages in thread
From: Chong Yidong @ 2012-10-13 9:38 UTC (permalink / raw)
To: David Reitter; +Cc: 6407
David Reitter <david.reitter@gmail.com> writes:
> My `url-callback-arguments' here is just the callback args list that
> was originally used for the url-http request as above.
`url-http' does require the callback arguments to have a certain form
(the first element must be a plist specifying the retrieval status).
I've committed a doc fix to trunk.
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2012-10-13 9:38 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-06-11 19:38 bug#6407: URL: error when handling redirects David Reitter
2012-10-13 9:38 ` Chong Yidong
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.