Add in some useful convenience functions for handling HTTP.

This commit is contained in:
Mark A. Hershberger 2010-06-22 12:48:53 -04:00
parent bc869eca8c
commit 04c2373982
4 changed files with 73 additions and 0 deletions

View file

@ -1,3 +1,8 @@
2010-06-22 Mark A. Hershberger <mah@everybody.org>
* mm-url.el (mm-url-encode-multipart-form-data): New function to handle
the *other* type of HTML form submission.
2010-06-15 Michael Albinus <michael.albinus@gmx.de>
* auth-source.el (auth-source-pick): If choice does not contain a

View file

@ -418,6 +418,48 @@ spaces. Die Die Die."
(mm-url-form-encode-xwfu (cdr data))))
pairs "&"))
(defun mm-url-encode-multipart-form-data (pairs &optional boundary)
"Return PAIRS encoded in multipart/form-data."
;; RFC1867
;; Get a good boundary
(unless boundary
(setq boundary (mml-compute-boundary '())))
(concat
;; Start with the boundary
"--" boundary "\r\n"
;; Create name value pairs
(mapconcat
'identity
;; Delete any returned items that are empty
(delq nil
(mapcar (lambda (data)
(when (car data)
;; For each pair
(concat
;; Encode the name
"Content-Disposition: form-data; name=\""
(car data) "\"\r\n"
"Content-Type: text/plain; charset=utf-8\r\n"
"Content-Transfer-Encoding: binary\r\n\r\n"
(cond ((stringp (cdr data))
(cdr data))
((integerp (cdr data))
(int-to-string (cdr data))))
"\r\n")))
pairs))
;; use the boundary as a separator
(concat "--" boundary "\r\n"))
;; put a boundary at the end.
"--" boundary "--\r\n"))
(defun mm-url-fetch-form (url pairs)
"Fetch a form from URL with PAIRS as the data using the POST method."
(mm-url-load-url)

View file

@ -1,3 +1,9 @@
2010-06-22 Mark A. Hershberger <mah@everybody.org>
* url-parse.el (url-user-for-url, url-password-for-url):
Convenience functions that get usernames and passwords for urls
from auth-source functions.
2010-06-12 Štěpán Němec <stepnem@gmail.com> (tiny change)
* url-vars.el (url-privacy-level): Fix doc typo. (Bug#6406)

View file

@ -25,6 +25,7 @@
;;; Code:
(require 'url-vars)
(require 'auth-source)
(eval-when-compile (require 'cl))
(autoload 'url-scheme-get-property "url-methods")
@ -174,6 +175,25 @@ TYPE USER PASSWORD HOST PORTSPEC FILENAME TARGET ATTRIBUTES FULLNESS."
(url-parse-make-urlobj
prot user pass host port file refs attr full)))))))
(defmacro url-bit-for-url (method lookfor url)
`(let* ((urlobj (url-generic-parse-url url))
(bit (funcall ,method urlobj))
(methods (list 'url-recreate-url
'url-host)))
(while (and (not bit) (> (length methods) 0))
(setq bit
(auth-source-user-or-password
,lookfor (funcall (pop methods) urlobj) (url-type urlobj))))
bit))
(defun url-user-for-url (url)
"Attempt to use .authinfo to find a user for this URL."
(url-bit-for-url 'url-user "login" url))
(defun url-password-for-url (url)
"Attempt to use .authinfo to find a password for this URL."
(url-bit-for-url 'url-password "password" url))
(provide 'url-parse)
;; arch-tag: f338325f-71ab-4bee-93cc-78fb9a03d403