Merge from emacs-23; up to 2010-06-01T01:49:15Z!monnier@iro.umontreal.ca
[emacs.git] / doc / misc / url.texi
blob2bde54a8dea55e1668c4e5f6b94859d938767ebd
1 \input texinfo
2 @setfilename ../../info/url
3 @settitle URL Programmer's Manual
5 @iftex
6 @c @finalout
7 @end iftex
8 @c @setchapternewpage odd
9 @c @smallbook
11 @tex
12 \overfullrule=0pt
13 %\global\baselineskip 30pt      % for printing in double space
14 @end tex
15 @dircategory Emacs lisp libraries
16 @direntry
17 * URL: (url).                   URL loading package.
18 @end direntry
20 @copying
21 This file documents the Emacs Lisp URL loading package.
23 Copyright @copyright{} 1993-1999, 2002, 2004-2011 Free Software Foundation, Inc.
25 @quotation
26 Permission is granted to copy, distribute and/or modify this document
27 under the terms of the GNU Free Documentation License, Version 1.3 or
28 any later version published by the Free Software Foundation; with no
29 Invariant Sections, with the Front-Cover texts being ``A GNU Manual,''
30 and with the Back-Cover Texts as in (a) below.  A copy of the license
31 is included in the section entitled ``GNU Free Documentation License''.
33 (a) The FSF's Back-Cover Text is: ``You have the freedom to copy and
34 modify this GNU manual.  Buying copies from the FSF supports it in
35 developing GNU and promoting software freedom.''
36 @end quotation
37 @end copying
40 @titlepage
41 @title URL Programmer's Manual
42 @subtitle First Edition, URL Version 2.0
43 @author William M. Perry @email{wmperry@@gnu.org}
44 @author David Love @email{fx@@gnu.org}
45 @page
46 @vskip 0pt plus 1filll
47 @insertcopying
48 @end titlepage
50 @contents
52 @node Top
53 @top URL
55 @ifnottex
56 @insertcopying
57 @end ifnottex
59 @menu
60 * Getting Started::             Preparing your program to use URLs.
61 * Retrieving URLs::             How to use this package to retrieve a URL.
62 * Supported URL Types::         Descriptions of URL types currently supported.
63 * Defining New URLs::           How to define a URL loader for a new protocol.
64 * General Facilities::          URLs can be cached, accessed via a gateway
65                                 and tracked in a history list.
66 * Customization::               Variables you can alter.
67 * GNU Free Documentation License:: The license for this documentation.
68 * Function Index::
69 * Variable Index::
70 * Concept Index::
71 @end menu
73 @node Getting Started
74 @chapter Getting Started
75 @cindex URLs, definition
76 @cindex URIs
78 @dfn{Uniform Resource Locators} (URLs) are a specific form of
79 @dfn{Uniform Resource Identifiers} (URI) described in RFC 2396 which
80 updates RFC 1738 and RFC 1808.  RFC 2016 defines uniform resource
81 agents.
83 URIs have the form @var{scheme}:@var{scheme-specific-part}, where the
84 @var{scheme}s supported by this library are described below.
85 @xref{Supported URL Types}.
87 FTP, NFS, HTTP, HTTPS, @code{rlogin}, @code{telnet}, tn3270,
88 IRC and gopher URLs all have the form
90 @example
91 @var{scheme}://@r{[}@var{userinfo}@@@r{]}@var{hostname}@r{[}:@var{port}@r{]}@r{[}/@var{path}@r{]}
92 @end example
93 @noindent
94 where @samp{@r{[}} and @samp{@r{]}} delimit optional parts.
95 @var{userinfo} sometimes takes the form @var{username}:@var{password}
96 but you should beware of the security risks of sending cleartext
97 passwords.  @var{hostname} may be a domain name or a dotted decimal
98 address.  If the @samp{:@var{port}} is omitted then the library will
99 use the `well known' port for that service when accessing URLs.  With
100 the possible exception of @code{telnet}, it is rare for ports to be
101 specified, and it is possible using a non-standard port may have
102 undesired consequences if a different service is listening on that
103 port (e.g., an HTTP URL specifying the SMTP port can cause mail to be
104 sent). @c , but @xref{Other Variables, url-bad-port-list}.
105 The meaning of the @var{path} component depends on the service.
107 @menu
108 * Configuration::
109 * Parsed URLs::                 URLs are parsed into vector structures.
110 @end menu
112 @node Configuration
113 @section Configuration
115 @defvar url-configuration-directory
116 @cindex @file{~/.url}
117 @cindex configuration files
118 The directory in which URL configuration files, the cache etc.,
119 reside.  Default @file{~/.url}.
120 @end defvar
122 @node Parsed URLs
123 @section Parsed URLs
124 @cindex parsed URLs
125 The library functions typically operate on @dfn{parsed} versions of
126 URLs.  These are actually vectors of the form:
128 @example
129 [@var{type} @var{user} @var{password} @var{host} @var{port} @var{file} @var{target} @var{attributes} @var{full}]
130 @end example
132 @noindent where
133 @table @var
134 @item type
135 is the type of the URL scheme, e.g., @code{http}
136 @item user
137 is the username associated with it, or @code{nil};
138 @item password
139 is the user password associated with it, or @code{nil};
140 @item host
141 is the host name associated with it, or @code{nil};
142 @item port
143 is the port number associated with it, or @code{nil};
144 @item file
145 is the `file' part of it, or @code{nil}.  This doesn't necessarily
146 actually refer to a file;
147 @item target
148 is the target part, or @code{nil};
149 @item attributes
150 is the attributes associated with it, or @code{nil};
151 @item full
152 is @code{t} for a fully-specified URL, with a host part indicated by
153 @samp{//} after the scheme part.
154 @end table
156 @findex url-type
157 @findex url-user
158 @findex url-password
159 @findex url-host
160 @findex url-port
161 @findex url-file
162 @findex url-target
163 @findex url-attributes
164 @findex url-full
165 @findex url-set-type
166 @findex url-set-user
167 @findex url-set-password
168 @findex url-set-host
169 @findex url-set-port
170 @findex url-set-file
171 @findex url-set-target
172 @findex url-set-attributes
173 @findex url-set-full
174 These attributes have accessors named @code{url-@var{part}}, where
175 @var{part} is the name of one of the elements above, e.g.,
176 @code{url-host}.  Similarly, there are setters of the form
177 @code{url-set-@var{part}}.
179 There are functions for parsing and unparsing between the string and
180 vector forms.
182 @defun url-generic-parse-url url
183 Return a parsed version of the string @var{url}.
184 @end defun
186 @defun url-recreate-url url
187 @cindex unparsing URLs
188 Recreates a URL string from the parsed @var{url}.
189 @end defun
191 @node Retrieving URLs
192 @chapter Retrieving URLs
194 @defun url-retrieve-synchronously url
195 Retrieve @var{url} synchronously and return a buffer containing the
196 data.  @var{url} is either a string or a parsed URL structure.  Return
197 @code{nil} if there are no data associated with it (the case for dired,
198 info, or mailto URLs that need no further processing).
199 @end defun
201 @defun url-retrieve url callback &optional cbargs
202 Retrieve @var{url} asynchronously and call @var{callback} with args
203 @var{cbargs} when finished.  The callback is called when the object
204 has been completely retrieved, with the current buffer containing the
205 object and any MIME headers associated with it.  @var{url} is either a
206 string or a parsed URL structure.  Returns the buffer @var{url} will
207 load into, or @code{nil} if the process has already completed.
208 @end defun
210 @node Supported URL Types
211 @chapter Supported URL Types
213 @menu
214 * http/https::                  Hypertext Transfer Protocol.
215 * file/ftp::                    Local files and FTP archives.
216 * info::                        Emacs `Info' pages.
217 * mailto::                      Sending email.
218 * news/nntp/snews::             Usenet news.
219 * rlogin/telnet/tn3270::        Remote host connectivity.
220 * irc::                         Internet Relay Chat.
221 * data::                        Embedded data URLs.
222 * nfs::                         Networked File System
223 @c * finger::
224 @c * gopher::
225 @c * netrek::
226 @c * prospero::
227 * cid::                         Content-ID.
228 * about::
229 * ldap::                        Lightweight Directory Access Protocol
230 * imap::                        IMAP mailboxes.
231 * man::                         Unix man pages.
232 @end menu
234 @node http/https
235 @section @code{http} and @code{https}
237 The scheme @code{http} is Hypertext Transfer Protocol.  The library
238 supports version 1.1, specified in RFC 2616.  (This supersedes 1.0,
239 defined in RFC 1945) HTTP URLs have the following form, where most of
240 the parts are optional:
241 @example
242 http://@var{user}:@var{password}@@@var{host}:@var{port}/@var{path}?@var{searchpart}#@var{fragment}
243 @end example
244 @c The @code{:@var{port}} part is optional, and @var{port} defaults to
245 @c 80.  The @code{/@var{path}} part, if present, is a slash-separated
246 @c series elements.  The @code{?@var{searchpart}}, if present, is the
247 @c query for a search or the content of a form submission.  The
248 @c @code{#fragment} part, if present, is a location in the document.
250 The scheme @code{https} is a secure version of @code{http}, with
251 transmission via SSL.  It is defined in RFC 2069.  Its default port is
252 443.  This scheme depends on SSL support in Emacs via the
253 @file{ssl.el} library and is actually implemented by forcing the
254 @code{ssl} gateway method to be used.  @xref{Gateways in general}.
256 @defopt url-honor-refresh-requests
257 This controls honoring of HTTP @samp{Refresh} headers by which
258 servers can direct clients to reload documents from the same URL or a
259 or different one.  @code{nil} means they will not be honored,
260 @code{t} (the default) means they will always be honored, and
261 otherwise the user will be asked on each request.
262 @end defopt
265 @menu
266 * Cookies::
267 * HTTP language/coding::
268 * HTTP URL Options::
269 * Dealing with HTTP documents::
270 @end menu
272 @node Cookies
273 @subsection Cookies
275 @defopt url-cookie-file
276 The file in which cookies are stored, defaulting to @file{cookies} in
277 the directory specified by @code{url-configuration-directory}.
278 @end defopt
280 @defopt url-cookie-confirmation
281 Specifies whether confirmation is require to accept cookies.
282 @end defopt
284 @defopt url-cookie-multiple-line
285 Specifies whether to put all cookies for the server on one line in the
286 HTTP request to satisfy broken servers like
287 @url{http://www.hotmail.com}.
288 @end defopt
290 @defopt url-cookie-trusted-urls
291 A list of regular expressions matching URLs from which to accept
292 cookies always.
293 @end defopt
295 @defopt url-cookie-untrusted-urls
296 A list of regular expressions matching URLs from which to reject
297 cookies always.
298 @end defopt
300 @defopt url-cookie-save-interval
301 The number of seconds between automatic saves of cookies to disk.
302 Default is one hour.
303 @end defopt
306 @node HTTP language/coding
307 @subsection Language and Encoding Preferences
309 HTTP allows clients to express preferences for the language and
310 encoding of documents which servers may honor.  For each of these
311 variables, the value is a string; it can specify a single choice, or
312 it can be a comma-separated list.
314 Normally, this list is ordered by descending preference.  However, each
315 element can be followed by @samp{;q=@var{priority}} to specify its
316 preference level, a decimal number from 0 to 1; e.g., for
317 @code{url-mime-language-string}, @w{@code{"de, en-gb;q=0.8,
318 en;q=0.7"}}.  An element that has no @samp{;q} specification has
319 preference level 1.
321 @defopt url-mime-charset-string
322 @cindex character sets
323 @cindex coding systems
324 This variable specifies a preference for character sets when documents
325 can be served in more than one encoding.
327 HTTP allows specifying a series of MIME charsets which indicate your
328 preferred character set encodings, e.g., Latin-9 or Big5, and these
329 can be weighted.  The default series is generated automatically from
330 the associated MIME types of all defined coding systems, sorted by the
331 coding system priority specified in Emacs.  @xref{Recognize Coding, ,
332 Recognizing Coding Systems, emacs, The GNU Emacs Manual}.
333 @end defopt
335 @defopt url-mime-language-string
336 @cindex language preferences
337 A string specifying the preferred language when servers can serve
338 files in several languages.  Use RFC 1766 abbreviations, e.g.,
339 @samp{en} for English, @samp{de} for German.
341 The string can be @code{"*"} to get the first available language (as
342 opposed to the default).
343 @end defopt
345 @node HTTP URL Options
346 @subsection HTTP URL Options
348 HTTP supports an @samp{OPTIONS} method describing things supported by
349 the URL@.
351 @defun url-http-options url
352 Returns a property list describing options available for URL.  The
353 property list members are:
355 @table @code
356 @item methods
357 A list of symbols specifying what HTTP methods the resource
358 supports.
360 @item dav
361 @cindex DAV
362 A list of numbers specifying what DAV protocol/schema versions are
363 supported.
365 @item dasl
366 @cindex DASL
367 A list of supported DASL search types supported (string form).
369 @item ranges
370 A list of the units available for use in partial document fetches.
372 @item p3p
373 @cindex P3P
374 The @dfn{Platform For Privacy Protection} description for the resource.
375 Currently this is just the raw header contents.
376 @end table
378 @end defun
380 @node Dealing with HTTP documents
381 @subsection Dealing with HTTP documents
383 HTTP URLs are retrieved into a buffer containing the HTTP headers
384 followed by the body.  Since the headers are quasi-MIME, they may be
385 processed using the MIME library.  @xref{Top,, Emacs MIME,
386 emacs-mime, The Emacs MIME Manual}.  The URL package provides a
387 function to do this in general:
389 @defun url-decode-text-part handle &optional coding
390 This function decodes charset-encoded text in the current buffer.  In
391 Emacs, the buffer is expected to be unibyte initially and is set to
392 multibyte after decoding.
393 HANDLE is the MIME handle of the original part.  CODING is an explicit
394 coding to use, overriding what the MIME headers specify.
395 The coding system used for the decoding is returned.
397 Note that this function doesn't deal with @samp{http-equiv} charset
398 specifications in HTML @samp{<meta>} elements.
399 @end defun
401 @node file/ftp
402 @section file and ftp
403 @cindex files
404 @cindex FTP
405 @cindex File Transfer Protocol
406 @cindex compressed files
407 @cindex dired
409 @example
410 ftp://@var{user}:@var{password}@@@var{host}:@var{port}/@var{file}
411 file://@var{user}:@var{password}@@@var{host}:@var{port}/@var{file}
412 @end example
414 These schemes are defined in RFC 1808.
415 @samp{ftp:} and @samp{file:} are synonymous in this library.  They
416 allow reading arbitrary files from hosts.  Either @samp{ange-ftp}
417 (Emacs) or @samp{efs} (XEmacs) is used to retrieve them from remote
418 hosts.  Local files are accessed directly.
420 Compressed files are handled, but support is hard-coded so that
421 @code{jka-compr-compression-info-list} and so on have no affect.
422 Suffixes recognized are @samp{.z}, @samp{.gz}, @samp{.Z} and
423 @samp{.bz2}.
425 @defopt url-directory-index-file
426 The filename to look for when indexing a directory, default
427 @samp{"index.html"}.  If this file exists, and is readable, then it
428 will be viewed instead of using @code{dired} to view the directory.
429 @end defopt
431 @node info
432 @section info
433 @cindex Info
434 @cindex Texinfo
435 @findex Info-goto-node
437 @example
438 info:@var{file}#@var{node}
439 @end example
441 Info URLs are not officially defined.  They invoke
442 @code{Info-goto-node} with argument @samp{(@var{file})@var{node}}.
443 @samp{#@var{node}} is optional, defaulting to @samp{Top}.
445 @node mailto
446 @section mailto
448 @cindex mailto
449 @cindex email
450 A mailto URL will send an email message to the address in the
451 URL, for example @samp{mailto:foo@@bar.com} would compose a
452 message to @samp{foo@@bar.com}.
454 @defopt url-mail-command
455 @vindex mail-user-agent
456 The function called whenever url needs to send mail.  This should
457 normally be left to default from @var{mail-user-agent}.  @xref{Mail
458 Methods, , Mail-Composition Methods, emacs, The GNU Emacs Manual}.
459 @end defopt
461 An @samp{X-Url-From} header field containing the URL of the document
462 that contained the mailto URL is added if that URL is known.
464 RFC 2368 extends the definition of mailto URLs in RFC 1738.
465 The form of a mailto URL is
466 @example
467 @samp{mailto:@var{mailbox}[?@var{header}=@var{contents}[&@var{header}=@var{contents}]]}
468 @end example
469 @noindent where an arbitrary number of @var{header}s can be added.  If the
470 @var{header} is @samp{body}, then @var{contents} is put in the body
471 otherwise a @var{header} header field is created with @var{contents}
472 as its contents.  Note that the URL library does not consider any
473 headers `dangerous' so you should check them before sending the
474 message.
476 @c Fixme: update
477 Email messages are defined in @sc{rfc}822.
479 @node news/nntp/snews
480 @section @code{news}, @code{nntp} and @code{snews}
481 @cindex news
482 @cindex network news
483 @cindex usenet
484 @cindex NNTP
485 @cindex snews
487 @c draft-gilman-news-url-01
488 The network news URL scheme take the following forms following RFC
489 1738 except that for compatibility with other clients, host and port
490 fields may be included in news URLs though they are properly only
491 allowed for nntp an snews.
493 @table @samp
494 @item news:@var{newsgroup}
495 Retrieves a list of messages in @var{newsgroup};
496 @item news:@var{message-id}
497 Retrieves the message with the given @var{message-id};
498 @item news:*
499 Retrieves a list of all available newsgroups;
500 @item nntp://@var{host}:@var{port}/@var{newsgroup}
501 @itemx nntp://@var{host}:@var{port}/@var{message-id}
502 @itemx nntp://@var{host}:@var{port}/*
503 Similar to the @samp{news} versions.
504 @end table
506 @samp{:@var{port}} is optional and defaults to :119.
508 @samp{snews} is the same as @samp{nntp} except that the default port
509 is :563.
510 @cindex SSL
511 (It is tunneled through SSL.)
513 An @samp{nntp} URL is the same as a news URL, except that the URL may
514 specify an article by its number.
516 @defopt url-news-server
517 This variable can be used to override the default news server.
518 Usually this will be set by the Gnus package, which is used to fetch
519 news.
520 @cindex environment variable
521 @vindex NNTPSERVER
522 It may be set from the conventional environment variable
523 @code{NNTPSERVER}.
524 @end defopt
526 @node rlogin/telnet/tn3270
527 @section rlogin, telnet and tn3270
528 @cindex rlogin
529 @cindex telnet
530 @cindex tn3270
531 @cindex terminal emulation
532 @findex terminal-emulator
534 These URL schemes from RFC 1738 for logon via a terminal emulator have
535 the form
536 @example
537 telnet://@var{user}:@var{password}@@@var{host}:@var{port}
538 @end example
539 but the @code{:@var{password}} component is ignored.
541 To handle rlogin, telnet and tn3270 URLs, a @code{rlogin},
542 @code{telnet} or @code{tn3270} (the program names and arguments are
543 hardcoded) session is run in a @code{terminal-emulator} buffer.
544 Well-known ports are used if the URL does not specify a port.
546 @node irc
547 @section irc
548 @cindex IRC
549 @cindex Internet Relay Chat
550 @cindex ZEN IRC
551 @cindex ERC
552 @cindex rcirc
553 @c Fixme: reference (was http://www.w3.org/Addressing/draft-mirashi-url-irc-01.txt)
554 @dfn{Internet Relay Chat} (IRC) is handled by handing off the @sc{irc}
555 session to a function named in @code{url-irc-function}.
557 @defopt url-irc-function
558 A function to actually open an IRC connection.
559 This function
560 must take five arguments, @var{host}, @var{port}, @var{channel},
561 @var{user} and @var{password}.  The @var{channel} argument specifies the
562 channel to join immediately, this can be @code{nil}.  By default this is
563 @code{url-irc-rcirc}.
564 @end defopt
565 @defun url-irc-rcirc host port channel user password
566 Processes the arguments and lets @code{rcirc} handle the session.
567 @end defun
568 @defun url-irc-erc host port channel user password
569 Processes the arguments and lets @code{ERC} handle the session.
570 @end defun
571 @defun url-irc-zenirc host port channel user password
572 Processes the arguments and lets @code{zenirc} handle the session.
573 @end defun
575 @node data
576 @section data
577 @cindex data URLs
579 @example
580 data:@r{[}@var{media-type}@r{]}@r{[};@var{base64}@r{]},@var{data}
581 @end example
583 Data URLs contain MIME data in the URL itself.  They are defined in
584 RFC 2397.
586 @var{media-type} is a MIME @samp{Content-Type} string, possibly
587 including parameters.  It defaults to
588 @samp{text/plain;charset=US-ASCII}.  The @samp{text/plain} can be
589 omitted but the charset parameter supplied.  If @samp{;base64} is
590 present, the @var{data} are base64-encoded.
592 @node nfs
593 @section nfs
594 @cindex NFS
595 @cindex Network File System
596 @cindex automounter
598 @example
599 nfs://@var{user}:@var{password}@@@var{host}:@var{port}/@var{file}
600 @end example
602 The @samp{nfs:} scheme is defined in RFC 2224.  It is similar to
603 @samp{ftp:} except that it points to a file on a remote host that is
604 handled by the automounter on the local host.
606 @defvar url-nfs-automounter-directory-spec
607 @end defvar
608 A string saying how to invoke the NFS automounter.  Certain @samp{%}
609 sequences are recognized:
611 @table @samp
612 @item %h
613 The hostname of the NFS server;
614 @item %n
615 The port number of the NFS server;
616 @item %u
617 The username to use to authenticate;
618 @item %p
619 The password to use to authenticate;
620 @item %f
621 The filename on the remote server;
622 @item %%
623 A literal @samp{%}.
624 @end table
626 Each can be used any number of times.
628 @node cid
629 @section cid
630 @cindex Content-ID
632 RFC 2111
634 @node about
635 @section about
637 @node ldap
638 @section ldap
639 @cindex LDAP
640 @cindex Lightweight Directory Access Protocol
642 The LDAP scheme is defined in RFC 2255.
644 @node imap
645 @section imap
646 @cindex IMAP
648 RFC 2192
650 @node man
651 @section man
652 @cindex @command{man}
653 @cindex Unix man pages
654 @findex man
656 @example
657 @samp{man:@var{page-spec}}
658 @end example
660 This is a non-standard scheme.  @var{page-spec} is passed directly to
661 the Lisp @code{man} function.
663 @node Defining New URLs
664 @chapter Defining New URLs
666 @menu
667 * Naming conventions::
668 * Required functions::
669 * Optional functions::
670 * Asynchronous fetching::
671 * Supporting file-name-handlers::
672 @end menu
674 @node Naming conventions
675 @section Naming conventions
677 @node Required functions
678 @section Required functions
680 @node Optional functions
681 @section Optional functions
683 @node Asynchronous fetching
684 @section Asynchronous fetching
686 @node Supporting file-name-handlers
687 @section Supporting file-name-handlers
689 @node General Facilities
690 @chapter General Facilities
692 @menu
693 * Disk Caching::
694 * Proxies::
695 * Gateways in general::
696 * History::
697 @end menu
699 @node Disk Caching
700 @section Disk Caching
701 @cindex Caching
702 @cindex Persistent Cache
703 @cindex Disk Cache
705 The disk cache stores retrieved documents locally, whence they can be
706 retrieved more quickly.  When requesting a URL that is in the cache,
707 the library checks to see if the page has changed since it was last
708 retrieved from the remote machine.  If not, the local copy is used,
709 saving the transmission over the network.
710 @cindex Cleaning the cache
711 @cindex Clearing the cache
712 @cindex Cache cleaning
713 Currently the cache isn't cleared automatically.
714 @c Running the @code{clean-cache} shell script
715 @c fist is recommended, to allow for future cleaning of the cache.  This
716 @c shell script will remove all files that have not been accessed since it
717 @c was last run.  To keep the cache pared down, it is recommended that this
718 @c script be run from @i{at} or @i{cron} (see the manual pages for
719 @c crontab(5) or at(1) for more information)
721 @defopt url-automatic-caching
722 Setting this variable non-@code{nil} causes documents to be cached
723 automatically.
724 @end defopt
726 @defopt url-cache-directory
727 This variable specifies the
728 directory to store the cache files.  It defaults to sub-directory
729 @file{cache} of @code{url-configuration-directory}.
730 @end defopt
732 @defopt url-cache-creation-function
733 The cache relies on a scheme for mapping URLs to files in the cache.
734 This variable names a function which sets the type of cache to use.
735 It takes a URL as argument and returns the absolute file name of the
736 corresponding cache file.  The two supplied possibilities are
737 @code{url-cache-create-filename-using-md5} and
738 @code{url-cache-create-filename-human-readable}.
739 @end defopt
741 @defun url-cache-create-filename-using-md5 url
742 Creates a cache file name from @var{url} using MD5 hashing.
743 This is creates entries with very few cache collisions and is fast.
744 @cindex MD5
745 @smallexample
746 (url-cache-create-filename-using-md5 "http://www.example.com/foo/bar")
747   @result{} "/home/fx/.url/cache/fx/http/com/example/www/b8a35774ad20db71c7c3409a5410e74f"
748 @end smallexample
749 @end defun
751 @defun url-cache-create-filename-human-readable url
752 Creates a cache file name from @var{url} more obviously connected to
753 @var{url} than for @code{url-cache-create-filename-using-md5}, but
754 more likely to conflict with other files.
755 @smallexample
756 (url-cache-create-filename-human-readable "http://www.example.com/foo/bar")
757   @result{} "/home/fx/.url/cache/fx/http/com/example/www/foo/bar"
758 @end smallexample
759 @end defun
761 @defun url-cache-expired
762 This function returns non-nil if a cache entry has expired (or is absent).
763 The arguments are a URL and optional expiration delay in seconds
764 (default @var{url-cache-expire-time}).
765 @end defun
767 @defopt url-cache-expire-time
768 This variable is the default number of seconds to use for the
769 expire-time argument of the function @code{url-cache-expired}.
770 @end defopt
772 @defun url-fetch-from-cache
773 This function takes a URL as its argument and returns a buffer
774 containing the data cached for that URL.
775 @end defun
777 @c Fixme: never actually used currently?
778 @c @defopt url-standalone-mode
779 @c @cindex Relying on cache
780 @c @cindex Cache only mode
781 @c @cindex Standalone mode
782 @c If this variable is non-@code{nil}, the library relies solely on the
783 @c cache for fetching documents and avoids checking if they have changed
784 @c on remote servers.
785 @c @end defopt
787 @c With a large cache of documents on the local disk, it can be very handy
788 @c when traveling, or any other time the network connection is not active
789 @c (a laptop with a dial-on-demand PPP connection, etc).  Emacs/W3 can rely
790 @c solely on its cache, and avoid checking to see if the page has changed
791 @c on the remote server.  In the case of a dial-on-demand PPP connection,
792 @c this will keep the phone line free as long as possible, only bringing up
793 @c the PPP connection when asking for a page that is not located in the
794 @c cache.  This is very useful for demonstrations as well.
796 @node Proxies
797 @section Proxies and Gatewaying
799 @c fixme: check/document url-ns stuff
800 @cindex proxy servers
801 @cindex proxies
802 @cindex environment variables
803 @vindex HTTP_PROXY
804 Proxy servers are commonly used to provide gateways through firewalls
805 or as caches serving some more-or-less local network.  Each protocol
806 (HTTP, FTP, etc.)@: can have a different gateway server.  Proxying is
807 conventionally configured commonly amongst different programs through
808 environment variables of the form @code{@var{protocol}_proxy}, where
809 @var{protocol} is one of the supported network protocols (@code{http},
810 @code{ftp} etc.).  The library recognizes such variables in either
811 upper or lower case.  Their values are of one of the forms:
812 @itemize @bullet
813 @item @code{@var{host}:@var{port}}
814 @item A full URL;
815 @item Simply a host name.
816 @end itemize
818 @vindex NO_PROXY
819 The @code{NO_PROXY} environment variable specifies URLs that should be
820 excluded from proxying (on servers that should be contacted directly).
821 This should be a comma-separated list of hostnames, domain names, or a
822 mixture of both.  Asterisks can be used as wildcards, but other
823 clients may not support that.  Domain names may be indicated by a
824 leading dot.  For example:
825 @example
826 NO_PROXY="*.aventail.com,home.com,.seanet.com"
827 @end example
828 @noindent says to contact all machines in the @samp{aventail.com} and
829 @samp{seanet.com} domains directly, as well as the machine named
830 @samp{home.com}.  If @code{NO_PROXY} isn't defined, @code{no_PROXY}
831 and @code{no_proxy} are also tried, in that order.
833 Proxies may also be specified directly in Lisp.
835 @defopt url-proxy-services
836 This variable is an alist of URL schemes and proxy servers that
837 gateway them.  The items are of the form @w{@code{(@var{scheme}
838 . @var{host}:@var{portnumber})}}, says that the URL @var{scheme} is
839 gatewayed through @var{portnumber} on the specified @var{host}.  An
840 exception is the pseudo scheme @code{"no_proxy"}, which is paired with
841 a regexp matching host names not to be proxied.  This variable is
842 initialized from the environment as above.
844 @example
845 (setq url-proxy-services
846       '(("http"     . "proxy.aventail.com:80")
847         ("no_proxy" . "^.*\\(aventail\\|seanet\\)\\.com")))
848 @end example
849 @end defopt
851 @node Gateways in general
852 @section Gateways in General
853 @cindex gateways
854 @cindex firewalls
856 The library provides a general gateway layer through which all
857 networking passes.  It can both control access to the network and
858 provide access through gateways in firewalls.  This may make direct
859 connections in some cases and pass through some sort of gateway in
860 others.@footnote{Proxies (which only operate over HTTP) are
861 implemented using this.}  The library's basic function responsible for
862 making connections is @code{url-open-stream}.
864 @defun url-open-stream name buffer host service
865 @cindex opening a stream
866 @cindex stream, opening
867 Open a stream to @var{host}, possibly via a gateway.  The other
868 arguments are as for @code{open-network-stream}.  This will not make a
869 connection if @code{url-gateway-unplugged} is non-@code{nil}.
870 @end defun
872 @defvar url-gateway-local-host-regexp
873 This is a regular expression that matches local hosts that do not
874 require the use of a gateway.  If @code{nil}, all connections are made
875 through the gateway.
876 @end defvar
878 @defvar url-gateway-method
879 This variable controls which gateway method is used.  It may be useful
880 to bind it temporarily in some applications.  It has values taken from
881 a list of symbols.  Possible values are:
883 @table @code
884 @item telnet
885 @cindex @command{telnet}
886 Use this method if you must first telnet and log into a gateway host,
887 and then run telnet from that host to connect to outside machines.
889 @item rlogin
890 @cindex @command{rlogin}
891 This method is identical to @code{telnet}, but uses @command{rlogin}
892 to log into the remote machine without having to send the username and
893 password over the wire every time.
895 @item socks
896 @cindex @sc{socks}
897 Use if the firewall has a @sc{socks} gateway running on it.  The
898 @sc{socks} v5 protocol is defined in RFC 1928.
900 @c @item ssl
901 @c This probably shouldn't be documented
902 @c Fixme: why not? -- fx
904 @item native
905 This method uses Emacs's builtin networking directly.  This is the
906 default.  It can be used only if there is no firewall blocking access.
907 @end table
908 @end defvar
910 The following variables control the gateway methods.
912 @defopt url-gateway-telnet-host
913 The gateway host to telnet to.  Once logged in there, you then telnet
914 out to the hosts you want to connect to.
915 @end defopt
916 @defopt url-gateway-telnet-parameters
917 This should be a list of parameters to pass to the @command{telnet} program.
918 @end defopt
919 @defopt url-gateway-telnet-password-prompt
920 This is a regular expression that matches the password prompt when
921 logging in.
922 @end defopt
923 @defopt url-gateway-telnet-login-prompt
924 This is a regular expression that matches the username prompt when
925 logging in.
926 @end defopt
927 @defopt url-gateway-telnet-user-name
928 The username to log in with.
929 @end defopt
930 @defopt url-gateway-telnet-password
931 The password to send when logging in.
932 @end defopt
933 @defopt url-gateway-prompt-pattern
934 This is a regular expression that matches the shell prompt.
935 @end defopt
937 @defopt url-gateway-rlogin-host
938 Host to @samp{rlogin} to before telnetting out.
939 @end defopt
940 @defopt url-gateway-rlogin-parameters
941 Parameters to pass to @samp{rsh}.
942 @end defopt
943 @defopt url-gateway-rlogin-user-name
944 User name to use when logging in to the gateway.
945 @end defopt
946 @defopt url-gateway-prompt-pattern
947 This is a regular expression that matches the shell prompt.
948 @end defopt
950 @defopt socks-server
951 This specifies the default server, it takes the form
952 @w{@code{("Default server" @var{server} @var{port} @var{version})}}
953 where @var{version} can be either 4 or 5.
954 @end defopt
955 @defvar socks-password
956 If this is @code{nil} then you will be asked for the password,
957 otherwise it will be used as the password for authenticating you to
958 the @sc{socks} server.
959 @end defvar
960 @defvar socks-username
961 This is the username to use when authenticating yourself to the
962 @sc{socks} server.  By default this is your login name.
963 @end defvar
964 @defvar socks-timeout
965 This controls how long, in seconds, to wait for responses from the
966 @sc{socks} server; it is 5 by default.
967 @end defvar
968 @c fixme: these have been effectively commented-out in the code
969 @c @defopt socks-server-aliases
970 @c This a list of server aliases.  It is a list of aliases of the form
971 @c @var{(alias hostname port version)}.
972 @c @end defopt
973 @c @defopt socks-network-aliases
974 @c This a list of network aliases.  Each entry in the list takes the form
975 @c @var{(alias (network))} where @var{alias} is a string that names the
976 @c @var{network}.  The networks can contain a pair (not a dotted pair) of
977 @c @sc{ip} addresses which specify a range of @sc{ip} addresses, an @sc{ip}
978 @c address and a netmask, a domain name or a unique hostname or @sc{ip}
979 @c address.
980 @c @end defopt
981 @c @defopt socks-redirection-rules
982 @c This a list of redirection rules.  Each rule take the form
983 @c @var{(Destination network Connection type)} where @var{Destination
984 @c network} is a network alias from @code{socks-network-aliases} and
985 @c @var{Connection type} can be @code{nil} in which case a direct
986 @c connection is used, or it can be an alias from
987 @c @code{socks-server-aliases} in which case that server is used as a
988 @c proxy.
989 @c @end defopt
990 @defopt socks-nslookup-program
991 @cindex @command{nslookup}
992 This the @samp{nslookup} program.  It is @code{"nslookup"} by default.
993 @end defopt
995 @menu
996 * Suppressing network connections::
997 @end menu
998 @c * Broken hostname resolution::
1000 @node Suppressing network connections
1001 @subsection Suppressing Network Connections
1003 @cindex network connections, suppressing
1004 @cindex suppressing network connections
1005 @cindex bugs, HTML
1006 @cindex HTML `bugs'
1007 In some circumstances it is desirable to suppress making network
1008 connections.  A typical case is when rendering HTML in a mail user
1009 agent, when external URLs should not be activated, particularly to
1010 avoid `bugs' which `call home' by fetch single-pixel images and the
1011 like.  To arrange this, bind the following variable for the duration
1012 of such processing.
1014 @defvar url-gateway-unplugged
1015 If this variable is non-@code{nil} new network connections are never
1016 opened by the URL library.
1017 @end defvar
1019 @c @node Broken hostname resolution
1020 @c @subsection Broken Hostname Resolution
1022 @c @cindex hostname resolver
1023 @c @cindex resolver, hostname
1024 @c Some C libraries do not include the hostname resolver routines in
1025 @c their static libraries.  If Emacs was linked statically, and was not
1026 @c linked with the resolver libraries, it will not be able to get to any
1027 @c machines off the local network.  This is characterized by being able
1028 @c to reach someplace with a raw ip number, but not its hostname
1029 @c (@url{http://129.79.254.191/} works, but
1030 @c @url{http://www.cs.indiana.edu/} doesn't).  This used to happen on
1031 @c SunOS4 and Ultrix, but is now probably now rare.  If Emacs can't be
1032 @c rebuilt linked against the resolver library, it can use the external
1033 @c @command{nslookup} program instead.
1035 @c @defopt url-gateway-broken-resolution
1036 @c @cindex @code{nslookup} program
1037 @c @cindex program, @code{nslookup}
1038 @c If non-@code{nil}, this variable says to use the program specified by
1039 @c @code{url-gateway-nslookup-program} program to do hostname resolution.
1040 @c @end defopt
1042 @c @defopt url-gateway-nslookup-program
1043 @c The name of the program to do hostname lookup if Emacs can't do it
1044 @c directly.  This program should expect a single argument on the command
1045 @c line---the hostname to resolve---and should produce output similar to
1046 @c the standard Unix @command{nslookup} program:
1047 @c @example
1048 @c Name: www.cs.indiana.edu
1049 @c Address: 129.79.254.191
1050 @c @end example
1051 @c @end defopt
1053 @node History
1054 @section History
1056 @findex url-do-setup
1057 The library can maintain a global history list tracking URLs accessed.
1058 URL completion can be done from it.  The history mechanism is set up
1059 automatically via @code{url-do-setup} when it is configured to be on.
1060 Note that the size of the history list is currently not limited.
1062 @vindex url-history-hash-table
1063 The history `list' is actually a hash table,
1064 @code{url-history-hash-table}.  It contains access times keyed by URL
1065 strings.  The times are in the format returned by @code{current-time}.
1067 @defun url-history-update-url url time
1068 This function updates the history table with an entry for @var{url}
1069 accessed at the given @var{time}.
1070 @end defun
1072 @defopt url-history-track
1073 If non-@code{nil}, the library will keep track of all the URLs
1074 accessed.  If it is @code{t}, the list is saved to disk at the end of
1075 each Emacs session.  The default is @code{nil}.
1076 @end defopt
1078 @defopt url-history-file
1079 The file storing the history list between sessions.  It defaults to
1080 @file{history} in @code{url-configuration-directory}.
1081 @end defopt
1083 @defopt url-history-save-interval
1084 @findex url-history-setup-save-timer
1085 The number of seconds between automatic saves of the history list.
1086 Default is one hour.  Note that if you change this variable directly,
1087 rather than using Custom, after @code{url-do-setup} has been run, you
1088 need to run the function @code{url-history-setup-save-timer}.
1089 @end defopt
1091 @defun url-history-parse-history &optional fname
1092 Parses the history file @var{fname} (default @code{url-history-file})
1093 and sets up the history list.
1094 @end defun
1096 @defun url-history-save-history &optional fname
1097 Saves the current history to file @var{fname} (default
1098 @code{url-history-file}).
1099 @end defun
1101 @defun url-completion-function string predicate function
1102 You can use this function to do completion of URLs from the history.
1103 @end defun
1105 @node Customization
1106 @chapter Customization
1108 @section Environment Variables
1110 @cindex environment variables
1111 The following environment variables affect the library's operation at
1112 startup.
1114 @table @code
1115 @item TMPDIR
1116 @vindex TMPDIR
1117 @vindex url-temporary-directory
1118 If this is defined, @var{url-temporary-directory} is initialized from
1120 @end table
1122 @section General User Options
1124 The following user options, settable with Customize, affect the
1125 general operation of the package.
1127 @defopt url-debug
1128 @cindex debugging
1129 Specifies the types of debug messages which are logged to
1130 the @code{*URL-DEBUG*} buffer.
1131 @code{t} means log all messages.
1132 A number means log all messages and show them with @code{message}.
1133 It may also be a list of the types of messages to be logged.
1134 @end defopt
1135 @defopt url-personal-mail-address
1136 @end defopt
1137 @defopt url-privacy-level
1138 @end defopt
1139 @defopt url-uncompressor-alist
1140 @end defopt
1141 @defopt url-passwd-entry-func
1142 @end defopt
1143 @defopt url-standalone-mode
1144 @end defopt
1145 @defopt url-bad-port-list
1146 @end defopt
1147 @defopt url-max-password-attempts
1148 @end defopt
1149 @defopt url-temporary-directory
1150 @end defopt
1151 @defopt url-show-status
1152 @end defopt
1153 @defopt url-confirmation-func
1154 The function to use for asking yes or no functions.  This is normally
1155 either @code{y-or-n-p} or @code{yes-or-no-p}, but could be another
1156 function taking a single argument (the prompt) and returning @code{t}
1157 only if an affirmative answer is given.
1158 @end defopt
1159 @defopt url-gateway-method
1160 @c fixme: describe gatewaying
1161 A symbol specifying the type of gateway support to use for connections
1162 from the local machine.  The supported methods are:
1164 @table @code
1165 @item telnet
1166 Run telnet in a subprocess to connect;
1167 @item rlogin
1168 Rlogin to another machine to connect;
1169 @item socks
1170 Connect through a socks server;
1171 @item ssl
1172 Connect with SSL;
1173 @item native
1174 Connect directly.
1175 @end table
1176 @end defopt
1178 @node GNU Free Documentation License
1179 @appendix GNU Free Documentation License
1180 @include doclicense.texi
1182 @node Function Index
1183 @unnumbered Command and Function Index
1184 @printindex fn
1186 @node Variable Index
1187 @unnumbered Variable Index
1188 @printindex vr
1190 @node Concept Index
1191 @unnumbered Concept Index
1192 @printindex cp
1194 @bye