Function: url-retrieve-internal
url-retrieve-internal is a byte-compiled function defined in
url.el.gz.
Signature
(url-retrieve-internal URL CALLBACK CBARGS &optional SILENT INHIBIT-COOKIES)
Documentation
Internal function; external interface is url-retrieve.
The callback function will receive an updated value of CBARGS as
arguments; its first element should be a plist specifying what has
happened so far during the request, as described in the docstring
of url-retrieve (if in doubt, specify nil).
If SILENT, don't message progress reports and the like. If INHIBIT-COOKIES, cookies will neither be stored nor sent to the server. If URL is a multibyte string, it will be encoded as utf-8 and URL-encoded before it's used.
Source Code
;; Defined in /usr/src/emacs/lisp/url/url.el.gz
(defun url-retrieve-internal (url callback cbargs &optional silent
inhibit-cookies)
"Internal function; external interface is `url-retrieve'.
The callback function will receive an updated value of CBARGS as
arguments; its first element should be a plist specifying what has
happened so far during the request, as described in the docstring
of `url-retrieve' (if in doubt, specify nil).
If SILENT, don't message progress reports and the like.
If INHIBIT-COOKIES, cookies will neither be stored nor sent to
the server.
If URL is a multibyte string, it will be encoded as utf-8 and
URL-encoded before it's used."
(url-do-setup)
(url-gc-dead-buffers)
(when (stringp url)
(set-text-properties 0 (length url) nil url)
(setq url (url-encode-url url)))
(if (not (url-p url))
(setq url (url-generic-parse-url url)))
(if (not (functionp callback))
(error "Must provide a callback function to url-retrieve"))
(unless (url-type url)
(error "Bad url: %s" (url-recreate-url url)))
(setf (url-silent url) silent)
(setf (url-asynchronous url) url-asynchronous)
(setf (url-use-cookies url) (not inhibit-cookies))
;; Once in a while, remove old entries from the URL cache.
(when (zerop (% url-retrieve-number-of-calls 1000))
(condition-case error
(url-cache-prune-cache)
(file-error
(message "Error when expiring the cache: %s" error))))
(setq url-retrieve-number-of-calls (1+ url-retrieve-number-of-calls))
(let ((loader (url-scheme-get-property (url-type url) 'loader))
(url-using-proxy (if (url-host url)
(url-find-proxy-for-url url (url-host url))))
(buffer nil)
(asynch (url-scheme-get-property (url-type url) 'asynchronous-p)))
(when url-using-proxy
(setf asynch t
loader #'url-proxy
(url-asynchronous url) t))
(if asynch
(let ((url-current-object url))
(setq buffer (funcall loader url callback cbargs)))
(setq buffer (funcall loader url))
(if buffer
(with-current-buffer buffer
(apply callback cbargs))))
(if url-history-track
(url-history-update-url url (current-time)))
buffer))