2 @setfilename ../info/url
3 @settitle URL Programmer's Manual
8 @c @setchapternewpage odd
13 %\global\baselineskip 30pt % for printing in double space
15 @dircategory World Wide Web
16 @dircategory GNU Emacs Lisp
18 * URL: (url). URL loading package.
22 This file documents the URL loading package.
24 Copyright (C) 1996, 1997, 1998, 1999, 2002, 2004 Free Software Foundation
25 Copyright (C) 1993, 1994, 1995, 1996 William M. Perry
27 Permission is granted to copy, distribute and/or modify this document
28 under the terms of the GNU Free Documentation License, Version 1.1 or
29 any later version published by the Free Software Foundation; with the
30 Invariant Sections being
31 ``GNU GENERAL PUBLIC LICENSE''. A copy of the
32 license is included in the section entitled ``GNU Free Documentation
39 @center @titlefont{URL}
40 @center @titlefont{Programmer's Manual}
42 @center First Edition, URL Version 2.0
44 @c @center December 1999
46 @center William M. Perry
47 @center @email{wmperry@@gnu.org}
49 @center @email{fx@@gnu.org}
51 @vskip 0pt plus 1filll
52 Copyright @copyright{} 1993, 1994, 1995, 1996 William M. Perry@*
53 Copyright @copyright{} 1996, 1997, 1998, 1999, 2002 Free Software Foundation
55 Permission is granted to copy, distribute and/or modify this document
56 under the terms of the GNU Free Documentation License, Version 1.1 or
57 any later version published by the Free Software Foundation; with the
58 Invariant Sections being
59 ``GNU GENERAL PUBLIC LICENSE''. A copy of the
60 license is included in the section entitled ``GNU Free Documentation
70 * Getting Started:: Preparing your program to use URLs.
71 * Retrieving URLs:: How to use this package to retrieve a URL.
72 * Supported URL Types:: Descriptions of URL types currently supported.
73 * Defining New URLs:: How to define a URL loader for a new protocol.
74 * General Facilities:: URLs can be cached, accessed via a gateway
75 and tracked in a history list.
76 * Customization:: Variables you can alter.
83 @chapter Getting Started
84 @cindex URLs, definition
87 @dfn{Uniform Resource Locators} (URLs) are a specific form of
88 @dfn{Uniform Resource Identifiers} (URI) described in RFC 2396 which
89 updates RFC 1738 and RFC 1808. RFC 2016 defines uniform resource
92 URIs have the form @var{scheme}:@var{scheme-specific-part}, where the
93 @var{scheme}s supported by this library are described below.
94 @xref{Supported URL Types}.
96 FTP NFS, HTTP, HTTPS, @code{rlogin}, @code{telnet}, tn3270,
97 IRC and gopher URLs all have the form
100 @var{scheme}://@r{[}@var{userinfo}@@@r{]}@var{hostname}@r{[}:@var{port}@r{]}@r{[}/@var{path}@r{]}
103 where @samp{@r{[}} and @samp{@r{]}} delimit optional parts.
104 @var{userinfo} sometimes takes the form @var{username}:@var{password}
105 but you should beware of the security risks of sending cleartext
106 passwords. @var{hostname} may be a domain name or a dotted decimal
107 address. If the @samp{:@var{port}} is omitted then the library will
108 use the `well known' port for that service when accessing URLs. With
109 the possible exception of @code{telnet}, it is rare for ports to be
110 specified, and it is possible using a non-standard port may have
111 undesired consequences if a different service is listening on that
112 port (e.g.@: an HTTP URL specifying the SMTP port can cause mail to be
113 sent).@c , but @xref{Other Variables, url-bad-port-list}.
115 the @var{path} component depends on the service.
119 * Parsed URLs:: URLs are parsed into vector structures.
123 @section Configuration
125 @defvar url-configuration-directory
126 @cindex @file{~/.url}
127 @cindex configuration files
128 The directory in which URL configuration files, the cache etc.,
129 reside. Default @file{~/.url}.
135 The library functions typically operate on @dfn{parsed} versions of
136 URLs. These are actually vectors of the form:
139 [@var{type} @var{user} @var{password} @var{host} @var{port} @var{file} @var{target} @var{attributes} @var{full}]
145 is the type of the URL scheme, e.g.@: @code{http}
147 is the username associated with it, or @code{nil};
149 is the user password associated with it, or @code{nil};
151 is the host name associated with it, or @code{nil};
153 is the port number associated with it, or @code{nil};
155 is the `file' part of it, or @code{nil}. This doesn't necessarily
156 actually refer to a file;
158 is the target part, or @code{nil};
160 is the attributes associated with it, or @code{nil};
162 is @code{t} for a fully-specified URL, with a host part indicated by
163 @samp{//} after the scheme part.
173 @findex url-attributes
177 @findex url-set-password
181 @findex url-set-target
182 @findex url-set-attributes
184 These attributes have accessors named @code{url-@var{part}}, where
185 @var{part} is the name of one of the elements above, e.g.@:
186 @code{url-host}. Similarly, there are setters of the form
187 @code{url-set-@var{part}}.
189 There are functions for parsing and unparsing between the string and
192 @defun url-generic-parse-url url
193 Return a parsed version of the string @var{url}.
196 @defun url-recreate-url url
197 @cindex unparsing URLs
198 Recreates a URL string from the parsed @var{url}.
201 @node Retrieving URLs
202 @chapter Retrieving URLs
204 @defun url-retrieve-synchronously url
205 Retrieve @var{url} synchronously and return a buffer containing the
206 data. @var{url} is either a string or a parsed URL structure. Return
207 @code{nil} if there are no data associated with it (the case for dired,
208 info, or mailto URLs that need no further processing).
211 @defun url-retrieve url callback &optional cbargs
212 Retrieve @var{url} asynchronously and call @var{callback} with args
213 @var{cbargs} when finished. The callback is called when the object
214 has been completely retrieved, with the current buffer containing the
215 object and any MIME headers associated with it. @var{url} is either a
216 string or a parsed URL structure. Returns the buffer @var{url} will
217 load into, or @code{nil} if the process has already completed.
220 @node Supported URL Types
221 @chapter Supported URL Types
224 * http/https:: Hypertext Transfer Protocol.
225 * file/ftp:: Local files and FTP archives.
226 * info:: Emacs `Info' pages.
227 * mailto:: Sending email.
228 * news/nntp/snews:: Usenet news.
229 * rlogin/telnet/tn3270:: Remote host connectivity.
230 * irc:: Internet Relay Chat.
231 * data:: Embedded data URLs.
232 * nfs:: Networked File System
239 * ldap:: Lightweight Directory Access Protocol
240 * imap:: IMAP mailboxes.
241 * man:: Unix man pages.
245 @section @code{http} and @code{https}
247 The scheme @code{http} is Hypertext Transfer Protocol. The library
248 supports version 1.1, specified in RFC 2616. (This supersedes 1.0,
249 defined in RFC 1945) HTTP URLs have the following form, where most of
250 the parts are optional:
252 http://@var{user}:@var{password}@var{host}:@var{port}/@var{path}?@var{searchpart}#@var{fragment}
254 @c The @code{:@var{port}} part is optional, and @var{port} defaults to
255 @c 80. The @code{/@var{path}} part, if present, is a slash-separated
256 @c series elements. The @code{?@var{searchpart}}, if present, is the
257 @c query for a search or the content of a form submission. The
258 @c @code{#fragment} part, if present, is a location in the document.
260 The scheme @code{https} is a secure version of @code{http}, with
261 transmission via SSL. It is defined in RFC 2069. Its default port is
262 443. This scheme depends on SSL support in Emacs via the
263 @file{ssl.el} library and is actually implemented by forcing the
264 @code{ssl} gateway method to be used. @xref{Gateways in general}.
266 @defopt url-honor-refresh-requests
267 This controls honouring of HTTP @samp{Refresh} headers by which
268 servers can direct clients to reload documents from the same URL or a
269 or different one. @code{nil} means they will not be honoured,
270 @code{t} (the default) means they will always be honoured, and
271 otherwise the user will be asked on each request.
277 * HTTP language/coding::
279 * Dealing with HTTP documents::
285 @defopt url-cookie-file
286 The file in which cookies are stored, defaulting to @file{cookies} in
287 the directory specified by @code{url-configuration-directory}.
290 @defopt url-cookie-confirmation
291 Specifies whether confirmation is require to accept cookies.
294 @defopt url-cookie-multiple-line
295 Specifies whether to put all cookies for the server on one line in the
296 HTTP request to satisfy broken servers like
297 @url{http://www.hotmail.com}.
300 @defopt url-cookie-trusted-urls
301 A list of regular expressions matching URLs from which to accept
305 @defopt url-cookie-untrusted-urls
306 A list of regular expressions matching URLs from which to reject
310 @defopt url-cookie-save-interval
311 The number of seconds between automatic saves of cookies to disk.
316 @node HTTP language/coding
317 @subsection Language and Encoding Preferences
319 HTTP allows clients to express preferences for the language and
320 encoding of documents which servers may honour.
322 @defopt url-mime-charset-string
323 @cindex character sets
324 @cindex coding systems
325 This variable specifies a preference for character sets when documents
326 can be served in more than one encoding.
328 HTTP allows specifying a list of MIME charsets which indicate your
329 preferred character set encodings, e.g.@: Latin-9 or Big5, and these
330 can be weighted. In Emacs 21 this list is generated automatically
331 from the list of defined coding systems which have associated MIME
332 types. These are sorted by coding priority. @xref{Recognize Coding,
333 , Recognizing Coding Systems, emacs, The GNU Emacs Manual}.
336 @defopt url-mime-language-string
337 @cindex language preferences
338 A string specifying the preferred language when servers can serve
339 files in several languages. Use RFC 1766 abbreviations, e.g.@:
340 @samp{en} for English, @samp{de} for German. It can be a
341 comma-separated list in descending order of preference. The ordering
342 can be made explicit using `q' factors defined by HTTP, e.g.@:
343 @w{@samp{de, en-gb;q=0.8, en;q=0.7}}. It can be @samp{*} to get the
344 first available language (as opposed to the default).
347 @node HTTP URL Options
348 @subsection HTTP URL Options
350 HTTP supports an @samp{OPTIONS} method describing things supported by
353 @defun url-http-options url
354 Returns a property list describing options available for URL. The
355 property list members are:
359 A list of symbols specifying what HTTP methods the resource
364 A list of numbers specifying what DAV protocol/schema versions are
369 A list of supported DASL search types supported (string form).
372 A list of the units available for use in partial document fetches.
376 The @dfn{Platform For Privacy Protection} description for the resource.
377 Currently this is just the raw header contents.
382 @node Dealing with HTTP documents
383 @subsection Dealing with HTTP documents
385 HTTP URLs are retrieved into a buffer containing the HTTP headers
386 followed by the body. Since the headers are quasi-MIME, they may be
387 processed using the MIME library. @xref{Top,, Emacs MIME,
388 emacs-mime, The Emacs MIME Manual}. The URL package provides a
389 function to do this in general:
391 @defun url-decode-text-part handle &optional coding
392 This function decodes charset-encoded text in the current buffer. In
393 Emacs, the buffer is expected to be unibyte initially and is set to
394 multibyte after decoding.
395 HANDLE is the MIME handle of the original part. CODING is an explicit
396 coding to use, overriding what the MIME headers specify.
397 The coding system used for the decoding is returned.
399 Note that this function doesn't deal with @samp{http-equiv} charset
400 specifications in HTML @samp{<meta>} elements.
404 @section file and ftp
407 @cindex File Transfer Protocol
408 @cindex compressed files
412 ftp://@var{user}:@var{password}@@@var{host}:@var{port}/@var{file}
413 file://@var{user}:@var{password}@@@var{host}:@var{port}/@var{file}
416 These schemes are defined in RFC 1808.
417 @samp{ftp:} and @samp{file:} are synonymous in this library. They
418 allow reading arbitrary files from hosts. Either @samp{ange-ftp}
419 (Emacs) or @samp{efs} (XEmacs) is used to retrieve them from remote
420 hosts. Local files are accessed directly.
422 Compressed files are handled, but support is hard-coded so that
423 @code{jka-compr-compression-info-list} and so on have no affect.
424 Suffixes recognized are @samp{.z}, @samp{.gz}, @samp{.Z} and
427 @defopt url-directory-index-file
428 The filename to look for when indexing a directory, default
429 @samp{"index.html"}. If this file exists, and is readable, then it
430 will be viewed instead of using @code{dired} to view the directory.
437 @findex Info-goto-node
440 info:@var{file}#@var{node}
443 Info URLs are not officially defined. They invoke
444 @code{Info-goto-node} with argument @samp{(@var{file})@var{node}}.
445 @samp{#@var{node}} is optional, defaulting to @samp{Top}.
452 A mailto URL will send an email message to the address in the
453 URL, for example @samp{mailto:foo@@bar.com} would compose a
454 message to @samp{foo@@bar.com}.
456 @defopt url-mail-command
457 @vindex mail-user-agent
458 The function called whenever url needs to send mail. This should
459 normally be left to default from @var{mail-user-agent}. @xref{Mail
460 Methods, , Mail-Composition Methods, emacs, The GNU Emacs Manual}.
463 An @samp{X-Url-From} header field containing the URL of the document
464 that contained the mailto URL is added if that URL is known.
466 RFC 2368 extends the definition of mailto URLs in RFC 1738.
467 The form of a mailto URL is
469 @samp{mailto:@var{mailbox}[?@var{header}=@var{contents}[&@var{header}=@var{contents}]]}
471 @noindent where an arbitrary number of @var{header}s can be added. If the
472 @var{header} is @samp{body}, then @var{contents} is put in the body
473 otherwise a @var{header} header field is created with @var{contents}
474 as its contents. Note that the URL library does not consider any
475 headers `dangerous' so you should check them before sending the
479 Email messages are defined in @sc{rfc}822.
481 @node news/nntp/snews
482 @section @code{news}, @code{nntp} and @code{snews}
489 @c draft-gilman-news-url-01
490 The network news URL scheme take the following forms following RFC
491 1738 except that for compatibility with other clients, host and port
492 fields may be included in news URLs though they are properly only
493 allowed for nntp an snews.
496 @item news:@var{newsgroup}
497 Retrieves a list of messages in @var{newsgroup};
498 @item news:@var{message-id}
499 Retrieves the message with the given @var{message-id};
501 Retrieves a list of all available newsgroups;
502 @item nntp://@var{host}:@var{port}/@var{newsgroup}
503 @itemx nntp://@var{host}:@var{port}/@var{message-id}
504 @itemx nntp://@var{host}:@var{port}/*
505 Similar to the @samp{news} versions.
508 @samp{:@var{port}} is optional and defaults to :119.
510 @samp{snews} is the same as @samp{nntp} except that the default port
513 (It is tunneled through SSL.)
515 An @samp{nntp} URL is the same as a news URL, except that the URL may
516 specify an article by its number.
518 @defopt url-news-server
519 This variable can be used to override the default news server.
520 Usually this will be set by the Gnus package, which is used to fetch
522 @cindex environment variable
524 It may be set from the conventional environment variable
528 @node rlogin/telnet/tn3270
529 @section rlogin, telnet and tn3270
533 @cindex terminal emulation
534 @findex terminal-emulator
536 These URL schemes from RFC 1738 for logon via a terminal emulator have
539 telnet://@var{user}:@var{password}@@@var{host}:@var{port}
541 but the @code{:@var{password}} component is ignored.
543 To handle rlogin, telnet and tn3270 URLs, a @code{rlogin},
544 @code{telnet} or @code{tn3270} (the program names and arguments are
545 hardcoded) session is run in a @code{terminal-emulator} buffer.
546 Well-known ports are used if the URL does not specify a port.
551 @cindex Internet Relay Chat
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.
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-zenirc}.
565 @defun url-irc-zenirc host port channel user password
566 Processes the arguments and lets @code{zenirc} handle the session.
574 data:@r{[}@var{media-type}@r{]}@r{[};@var{base64}@r{]},@var{data}
577 Data URLs contain MIME data in the URL itself. They are defined in
580 @var{media-type} is a MIME @samp{Content-Type} string, possibly
581 including parameters. It defaults to
582 @samp{text/plain;charset=US-ASCII}. The @samp{text/plain} can be
583 omitted but the charset parameter supplied. If @samp{;base64} is
584 present, the @var{data} are base64-encoded.
589 @cindex Network File System
593 nfs://@var{user}:@var{password}@@@var{host}:@var{port}/@var{file}
596 The @samp{nfs:} scheme is defined in RFC 2224. It is similar to
597 @samp{ftp:} except that it points to a file on a remote host that is
598 handled by the automounter on the local host.
600 @defvar url-nfs-automounter-directory-spec
602 A string saying how to invoke the NFS automounter. Certain @samp{%}
603 sequences are recognized:
607 The hostname of the NFS server;
609 The port number of the NFS server;
611 The username to use to authenticate;
613 The password to use to authenticate;
615 The filename on the remote server;
620 Each can be used any number of times.
634 @cindex Lightweight Directory Access Protocol
636 The LDAP scheme is defined in RFC 2255.
646 @cindex @command{man}
647 @cindex Unix man pages
651 @samp{man:@var{page-spec}}
654 This is a non-standard scheme. @var{page-spec} is passed directly to
655 the Lisp @code{man} function.
657 @node Defining New URLs
658 @chapter Defining New URLs
661 * Naming conventions::
662 * Required functions::
663 * Optional functions::
664 * Asynchronous fetching::
665 * Supporting file-name-handlers::
668 @node Naming conventions
669 @section Naming conventions
671 @node Required functions
672 @section Required functions
674 @node Optional functions
675 @section Optional functions
677 @node Asynchronous fetching
678 @section Asynchronous fetching
680 @node Supporting file-name-handlers
681 @section Supporting file-name-handlers
683 @node General Facilities
684 @chapter General Facilities
689 * Gateways in general::
694 @section Disk Caching
696 @cindex Persistent Cache
699 The disk cache stores retrieved documents locally, whence they can be
700 retrieved more quickly. When requesting a URL that is in the cache,
701 the library checks to see if the page has changed since it was last
702 retrieved from the remote machine. If not, the local copy is used,
703 saving the transmission over the network.
704 @cindex Cleaning the cache
705 @cindex Clearing the cache
706 @cindex Cache cleaning
707 Currently the cache isn't cleared automatically.
708 @c Running the @code{clean-cache} shell script
709 @c fist is recommended, to allow for future cleaning of the cache. This
710 @c shell script will remove all files that have not been accessed since it
711 @c was last run. To keep the cache pared down, it is recommended that this
712 @c script be run from @i{at} or @i{cron} (see the manual pages for
713 @c crontab(5) or at(1) for more information)
715 @defopt url-automatic-caching
716 Setting this variable non-@code{nil} causes documents to be cached
720 @defopt url-cache-directory
721 This variable specifies the
722 directory to store the cache files. It defaults to sub-directory
723 @file{cache} of @code{url-configuration-directory}.
726 @c Fixme: function v. option, but neither used.
727 @c @findex url-cache-expired
728 @c @defopt url-cache-expired
729 @c This is a function to decide whether or not a cache entry has expired.
730 @c It takes two times as it parameters and returns non-@code{nil} if the
731 @c second time is ``too old'' when compared with the first time.
734 @defopt url-cache-creation-function
735 The cache relies on a scheme for mapping URLs to files in the cache.
736 This variable names a function which sets the type of cache to use.
737 It takes a URL as argument and returns the absolute file name of the
738 corresponding cache file. The two supplied possibilities are
739 @code{url-cache-create-filename-using-md5} and
740 @code{url-cache-create-filename-human-readable}.
743 @defun url-cache-create-filename-using-md5 url
744 Creates a cache file name from @var{url} using MD5 hashing.
746 This is creates entries with very few cache collisions and is fast if
747 you have the @code{md5} function as a primitive (Emacs 21 and XEmacs).
749 (url-cache-create-filename-using-md5 "http://www.example.com/foo/bar")
750 @result{} "/home/fx/.url/cache/fx/http/com/example/www/b8a35774ad20db71c7c3409a5410e74f"
754 @defun url-cache-create-filename-human-readable url
755 Creates a cache file name from @var{url} more obviously connected to
756 @var{url} than for @code{url-cache-create-filename-using-md5}, but
757 more likely to conflict with other files.
759 (url-cache-create-filename-human-readable "http://www.example.com/foo/bar")
760 @result{} "/home/fx/.url/cache/fx/http/com/example/www/foo/bar"
764 @c Fixme: never actually used currently?
765 @c @defopt url-standalone-mode
766 @c @cindex Relying on cache
767 @c @cindex Cache only mode
768 @c @cindex Standalone mode
769 @c If this variable is non-@code{nil}, the library relies solely on the
770 @c cache for fetching documents and avoids checking if they have changed
771 @c on remote servers.
774 @c With a large cache of documents on the local disk, it can be very handy
775 @c when traveling, or any other time the network connection is not active
776 @c (a laptop with a dial-on-demand PPP connection, etc). Emacs/W3 can rely
777 @c solely on its cache, and avoid checking to see if the page has changed
778 @c on the remote server. In the case of a dial-on-demand PPP connection,
779 @c this will keep the phone line free as long as possible, only bringing up
780 @c the PPP connection when asking for a page that is not located in the
781 @c cache. This is very useful for demonstrations as well.
784 @section Proxies and Gatewaying
786 @c fixme: check/document url-ns stuff
787 @cindex proxy servers
789 @cindex environment variables
791 Proxy servers are commonly used to provide gateways through firewalls
792 or as caches serving some more-or-less local network. Each protocol
793 (HTTP, FTP, etc.)@: can have a different gateway server. Proxying is
794 conventionally configured commonly amongst different programs through
795 environment variables of the form @code{@var{protocol}_proxy}, where
796 @var{protocol} is one of the supported network protocols (@code{http},
797 @code{ftp} etc.). The library recognizes such variables in either
798 upper or lower case. Their values are of one of the forms:
800 @item @code{@var{host}:@var{port}}
802 @item Simply a host name.
806 The @code{NO_PROXY} environment variable specifies URLs that should be
807 excluded from proxying (on servers that should be contacted directly).
808 This should be a comma-separated list of hostnames, domain names, or a
809 mixture of both. Asterisks can be used as wildcards, but other
810 clients may not support that. Domain names may be indicated by a
811 leading dot. For example:
813 NO_PROXY="*.aventail.com,home.com,.seanet.com"
815 @noindent says to contact all machines in the @samp{aventail.com} and
816 @samp{seanet.com} domains directly, as well as the machine named
817 @samp{home.com}. If @code{NO_PROXY} isn't defined, @code{no_PROXY}
818 and @code{no_proxy} are also tried, in that order.
820 Proxies may also be specified directly in Lisp.
822 @defopt url-proxy-services
823 This variable is an alist of URL schemes and proxy servers that
824 gateway them. The items are of the form @w{@code{(@var{scheme}
825 . @var{host}:@var{portnumber})}}, says that the URL @var{scheme} is
826 gatewayed through @var{portnumber} on the specified @var{host}. An
827 exception is the pseudo scheme @code{"no_proxy"}, which is paired with
828 a regexp matching host names not to be proxied. This variable is
829 initialized from the environment as above.
832 (setq url-proxy-services
833 '(("http" . "proxy.aventail.com:80")
834 ("no_proxy" . "^.*\\(aventail\\|seanet\\)\\.com")))
838 @node Gateways in general
839 @section Gateways in General
843 The library provides a general gateway layer through which all
844 networking passes. It can both control access to the network and
845 provide access through gateways in firewalls. This may make direct
846 connexions in some cases and pass through some sort of gateway in
847 others.@footnote{Proxies (which only operate over HTTP) are
848 implemented using this.} The library's basic function responsible for
849 making connexions is @code{url-open-stream}.
851 @defun url-open-stream name buffer host service
852 @cindex opening a stream
853 @cindex stream, opening
854 Open a stream to @var{host}, possibly via a gateway. The other
855 arguments are as for @code{open-network-stream}. This will not make a
856 connexion if @code{url-gateway-unplugged} is non-@code{nil}.
859 @defvar url-gateway-local-host-regexp
860 This is a regular expression that matches local hosts that do not
861 require the use of a gateway. If @code{nil}, all connexions are made
865 @defvar url-gateway-method
866 This variable controls which gateway method is used. It may be useful
867 to bind it temporarily in some applications. It has values taken from
868 a list of symbols. Possible values are:
872 @cindex @command{telnet}
873 Use this method if you must first telnet and log into a gateway host,
874 and then run telnet from that host to connect to outside machines.
877 @cindex @command{rlogin}
878 This method is identical to @code{telnet}, but uses @command{rlogin}
879 to log into the remote machine without having to send the username and
880 password over the wire every time.
884 Use if the firewall has a @sc{socks} gateway running on it. The
885 @sc{socks} v5 protocol is defined in RFC 1928.
888 @c This probably shouldn't be documented
889 @c Fixme: why not? -- fx
892 This method uses Emacs's builtin networking directly. This is the
893 default. It can be used only if there is no firewall blocking access.
897 The following variables control the gateway methods.
899 @defopt url-gateway-telnet-host
900 The gateway host to telnet to. Once logged in there, you then telnet
901 out to the hosts you want to connect to.
903 @defopt url-gateway-telnet-parameters
904 This should be a list of parameters to pass to the @command{telnet} program.
906 @defopt url-gateway-telnet-password-prompt
907 This is a regular expression that matches the password prompt when
910 @defopt url-gateway-telnet-login-prompt
911 This is a regular expression that matches the username prompt when
914 @defopt url-gateway-telnet-user-name
915 The username to log in with.
917 @defopt url-gateway-telnet-password
918 The password to send when logging in.
920 @defopt url-gateway-prompt-pattern
921 This is a regular expression that matches the shell prompt.
924 @defopt url-gateway-rlogin-host
925 Host to @samp{rlogin} to before telnetting out.
927 @defopt url-gateway-rlogin-parameters
928 Parametres to pass to @samp{rsh}.
930 @defopt url-gateway-rlogin-user-name
931 User name to use when logging in to the gateway.
933 @defopt url-gateway-prompt-pattern
934 This is a regular expression that matches the shell prompt.
938 This specifies the default server, it takes the form
939 @w{@code{("Default server" @var{server} @var{port} @var{version})}}
940 where @var{version} can be either 4 or 5.
942 @defvar socks-password
943 If this is @code{nil} then you will be asked for the password,
944 otherwise it will be used as the password for authenticating you to
945 the @sc{socks} server.
947 @defvar socks-username
948 This is the username to use when authenticating yourself to the
949 @sc{socks} server. By default this is your login name.
951 @defvar socks-timeout
952 This controls how long, in seconds, to wait for responses from the
953 @sc{socks} server; it is 5 by default.
955 @c fixme: these have been effectively commented-out in the code
956 @c @defopt socks-server-aliases
957 @c This a list of server aliases. It is a list of aliases of the form
958 @c @var{(alias hostname port version)}.
960 @c @defopt socks-network-aliases
961 @c This a list of network aliases. Each entry in the list takes the form
962 @c @var{(alias (network))} where @var{alias} is a string that names the
963 @c @var{network}. The networks can contain a pair (not a dotted pair) of
964 @c @sc{ip} addresses which specify a range of @sc{ip} addresses, an @sc{ip}
965 @c address and a netmask, a domain name or a unique hostname or @sc{ip}
968 @c @defopt socks-redirection-rules
969 @c This a list of redirection rules. Each rule take the form
970 @c @var{(Destination network Connection type)} where @var{Destination
971 @c network} is a network alias from @code{socks-network-aliases} and
972 @c @var{Connection type} can be @code{nil} in which case a direct
973 @c connection is used, or it can be an alias from
974 @c @code{socks-server-aliases} in which case that server is used as a
977 @defopt socks-nslookup-program
978 @cindex @command{nslookup}
979 This the @samp{nslookup} program. It is @code{"nslookup"} by default.
983 * Suppressing network connexions::
985 @c * Broken hostname resolution::
987 @node Suppressing network connexions
988 @subsection Suppressing Network Connexions
990 @cindex network connexions, suppressing
991 @cindex suppressing network connexions
994 In some circumstances it is desirable to suppress making network
995 connexions. A typical case is when rendering HTML in a mail user
996 agent, when external URLs should not be activated, particularly to
997 avoid `bugs' which `call home' by fetch single-pixel images and the
998 like. To arrange this, bind the following variable for the duration
1001 @defvar url-gateway-unplugged
1002 If this variable is non-@code{nil} new network connexions are never
1003 opened by the URL library.
1006 @c @node Broken hostname resolution
1007 @c @subsection Broken Hostname Resolution
1009 @c @cindex hostname resolver
1010 @c @cindex resolver, hostname
1011 @c Some C libraries do not include the hostname resolver routines in
1012 @c their static libraries. If Emacs was linked statically, and was not
1013 @c linked with the resolver libraries, it will not be able to get to any
1014 @c machines off the local network. This is characterized by being able
1015 @c to reach someplace with a raw ip number, but not its hostname
1016 @c (@url{http://129.79.254.191/} works, but
1017 @c @url{http://www.cs.indiana.edu/} doesn't). This used to happen on
1018 @c SunOS4 and Ultrix, but is now probably now rare. If Emacs can't be
1019 @c rebuilt linked against the resolver library, it can use the external
1020 @c @command{nslookup} program instead.
1022 @c @defopt url-gateway-broken-resolution
1023 @c @cindex @code{nslookup} program
1024 @c @cindex program, @code{nslookup}
1025 @c If non-@code{nil}, this variable says to use the program specified by
1026 @c @code{url-gateway-nslookup-program} program to do hostname resolution.
1029 @c @defopt url-gateway-nslookup-program
1030 @c The name of the program to do hostname lookup if Emacs can't do it
1031 @c directly. This program should expect a single argument on the command
1032 @c line---the hostname to resolve---and should produce output similar to
1033 @c the standard Unix @command{nslookup} program:
1035 @c Name: www.cs.indiana.edu
1036 @c Address: 129.79.254.191
1043 The library can maintain a global history list tracking URLs accessed.
1044 URL completion can be done from it. The history mechanism is set up
1045 @findex url-do-setup
1046 automatically via @code{url-do-setup} when it is configured to be on.
1047 Note that the size of the history list is currently not limited.
1049 @vindex url-history-hash-table
1050 The history `list' is actually a hash table,
1051 @code{url-history-hash-table}. It contains access times keyed by URL
1052 strings. The times are in the format returned by @code{current-time}.
1054 @defun url-history-update-url url time
1055 This function updates the history table with an entry for @var{url}
1056 accessed at the given @var{time}.
1059 @defopt url-history-track
1060 If non-@code{nil}, the library will keep track of all the URLs
1061 accessed. If is is @code{t}, the list is saved to disk at the end of
1062 each Emacs session. The default is @code{nil}.
1065 @defopt url-history-file
1066 The file storing the history list between sessions. It defaults to
1067 @file{history} in @code{url-configuration-directory}.
1070 @defopt url-history-save-interval
1071 @findex url-history-setup-save-timer
1072 The number of seconds between automatic saves of the history list.
1073 Default is one hour. Note that if you change this variable directly,
1074 rather than using Custom, after @code{url-do-setup} has been run, you
1075 need to run the function @code{url-history-setup-save-timer}.
1078 @defun url-history-parse-history &optional fname
1079 Parses the history file @var{fname} (default @code{url-history-file})
1080 and sets up the history list.
1083 @defun url-history-save-history &optional fname
1084 Saves the current history to file @var{fname} (default
1085 @code{url-history-file}).
1088 @defun url-completion-function string predicate function
1089 You can use this function to do completion of URLs from the history.
1093 @chapter Customization
1095 @section Environment Variables
1097 @cindex environment variables
1098 The following environment variables affect the library's operation at
1104 @vindex url-temporary-directory
1105 If this is defined, @var{url-temporary-directory} is initialized from
1109 @section General User Options
1111 The following user options, settable with Customize, affect the
1112 general operation of the package.
1116 Specifies the types of debug messages the library which are logged to
1117 the @code{*URL-DEBUG*} buffer.
1118 @code{t} means log all messages.
1119 A number means log all messages and show them with @code{message}.
1120 If may also be a list of the types of messages to be logged.
1122 @defopt url-personal-mail-address
1124 @defopt url-privacy-level
1126 @defopt url-uncompressor-alist
1128 @defopt url-passwd-entry-func
1130 @defopt url-standalone-mode
1132 @defopt url-bad-port-list
1134 @defopt url-max-password-attempts
1136 @defopt url-temporary-directory
1138 @defopt url-show-status
1140 @defopt url-confirmation-func
1141 The function to use for asking yes or no functions. This is normally
1142 either @code{y-or-n-p} or @code{yes-or-no-p}, but could be another
1143 function taking a single argument (the prompt) and returning @code{t}
1144 only if an affirmative answer is given.
1146 @defopt url-gateway-method
1147 @c fixme: describe gatewaying
1148 A symbol specifying the type of gateway support to use fro connexions
1149 from the local machine. The supported methods are:
1153 Run telnet in a subprocess to connect;
1155 Rlogin to another machine to connect;
1157 Connect through a socks server;
1165 @node Function Index
1166 @unnumbered Command and Function Index
1169 @node Variable Index
1170 @unnumbered Variable Index
1174 @unnumbered Concept Index
1177 @setchapternewpage odd
1182 arch-tag: c96be356-7e2d-4196-bcda-b13246c5c3f0