annotate bin/GET @ 6:a6d23e7fab01 default tip

final, all sigs on multiple pages
author Henry S. Thompson <ht@inf.ed.ac.uk>
date Thu, 08 Oct 2026 12:51:14 +0100
parents 2aa53823fb21
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
1 #!/usr/bin/perl -w
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
2
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
3 eval 'exec /usr/bin/perl -w -S $0 ${1+"$@"}'
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
4 if 0; # not running under some shell
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
5
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
6 # Simple user agent using LWP library.
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
7
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
8 =head1 NAME
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
9
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
10 lwp-request, GET, POST, HEAD - Simple command line user agent
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
11
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
12 =head1 SYNOPSIS
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
13
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
14 B<lwp-request> [B<-afPuUsSedvhx>] [B<-m> I<method>] [B<-b> I<base URL>] [B<-t> I<timeout>]
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
15 [B<-i> I<if-modified-since>] [B<-c> I<content-type>]
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
16 [B<-C> I<credentials>] [B<-p> I<proxy-url>] [B<-o> I<format>] I<url>...
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
17
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
18 =head1 DESCRIPTION
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
19
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
20 This program can be used to send requests to WWW servers and your
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
21 local file system. The request content for POST and PUT
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
22 methods is read from stdin. The content of the response is printed on
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
23 stdout. Error messages are printed on stderr. The program returns a
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
24 status value indicating the number of URLs that failed.
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
25
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
26 The options are:
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
27
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
28 =over 4
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
29
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
30 =item -m <method>
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
31
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
32 Set which method to use for the request. If this option is not used,
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
33 then the method is derived from the name of the program.
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
34
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
35 =item -f
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
36
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
37 Force request through, even if the program believes that the method is
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
38 illegal. The server might reject the request eventually.
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
39
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
40 =item -b <uri>
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
41
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
42 This URI will be used as the base URI for resolving all relative URIs
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
43 given as argument.
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
44
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
45 =item -t <timeout>
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
46
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
47 Set the timeout value for the requests. The timeout is the amount of
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
48 time that the program will wait for a response from the remote server
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
49 before it fails. The default unit for the timeout value is seconds.
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
50 You might append "m" or "h" to the timeout value to make it minutes or
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
51 hours, respectively. The default timeout is '3m', i.e. 3 minutes.
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
52
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
53 =item -i <time>
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
54
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
55 Set the If-Modified-Since header in the request. If I<time> is the
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
56 name of a file, use the modification timestamp for this file. If
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
57 I<time> is not a file, it is parsed as a literal date. Take a look at
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
58 L<HTTP::Date> for recognized formats.
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
59
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
60 =item -c <content-type>
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
61
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
62 Set the Content-Type for the request. This option is only allowed for
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
63 requests that take a content, i.e. POST and PUT. You can
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
64 force methods to take content by using the C<-f> option together with
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
65 C<-c>. The default Content-Type for POST is
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
66 C<application/x-www-form-urlencoded>. The default Content-type for
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
67 the others is C<text/plain>.
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
68
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
69 =item -p <proxy-url>
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
70
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
71 Set the proxy to be used for the requests. The program also loads
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
72 proxy settings from the environment. You can disable this with the
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
73 C<-P> option.
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
74
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
75 =item -P
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
76
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
77 Don't load proxy settings from environment.
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
78
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
79 =item -H <header>
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
80
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
81 Send this HTTP header with each request. You can specify several, e.g.:
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
82
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
83 lwp-request \
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
84 -H 'Referer: http://other.url/' \
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
85 -H 'Host: somehost' \
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
86 http://this.url/
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
87
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
88 =item -C <username>:<password>
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
89
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
90 Provide credentials for documents that are protected by Basic
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
91 Authentication. If the document is protected and you did not specify
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
92 the username and password with this option, then you will be prompted
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
93 to provide these values.
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
94
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
95 =back
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
96
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
97 The following options controls what is displayed by the program:
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
98
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
99 =over 4
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
100
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
101 =item -u
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
102
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
103 Print request method and absolute URL as requests are made.
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
104
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
105 =item -U
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
106
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
107 Print request headers in addition to request method and absolute URL.
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
108
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
109 =item -s
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
110
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
111 Print response status code. This option is always on for HEAD requests.
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
112
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
113 =item -S
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
114
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
115 Print response status chain. This shows redirect and authorization
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
116 requests that are handled by the library.
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
117
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
118 =item -e
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
119
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
120 Print response headers. This option is always on for HEAD requests.
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
121
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
122 =item -d
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
123
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
124 Do B<not> print the content of the response.
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
125
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
126 =item -o <format>
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
127
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
128 Process HTML content in various ways before printing it. If the
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
129 content type of the response is not HTML, then this option has no
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
130 effect. The legal format values are; I<text>, I<ps>, I<links>,
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
131 I<html> and I<dump>.
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
132
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
133 If you specify the I<text> format then the HTML will be formatted as
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
134 plain latin1 text. If you specify the I<ps> format then it will be
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
135 formatted as Postscript.
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
136
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
137 The I<links> format will output all links found in the HTML document.
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
138 Relative links will be expanded to absolute ones.
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
139
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
140 The I<html> format will reformat the HTML code and the I<dump> format
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
141 will just dump the HTML syntax tree.
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
142
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
143 Note that the C<HTML-Tree> distribution needs to be installed for this
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
144 option to work. In addition the C<HTML-Format> distribution needs to
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
145 be installed for I<-o text> or I<-o ps> to work.
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
146
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
147 =item -v
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
148
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
149 Print the version number of the program and quit.
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
150
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
151 =item -h
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
152
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
153 Print usage message and quit.
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
154
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
155 =item -a
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
156
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
157 Set text(ascii) mode for content input and output. If this option is not
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
158 used, content input and output is done in binary mode.
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
159
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
160 =back
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
161
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
162 Because this program is implemented using the LWP library, it will
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
163 only support the protocols that LWP supports.
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
164
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
165 =head1 SEE ALSO
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
166
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
167 L<lwp-mirror>, L<LWP>
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
168
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
169 =head1 COPYRIGHT
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
170
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
171 Copyright 1995-1999 Gisle Aas.
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
172
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
173 This library is free software; you can redistribute it and/or
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
174 modify it under the same terms as Perl itself.
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
175
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
176 =head1 AUTHOR
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
177
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
178 Gisle Aas <gisle@aas.no>
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
179
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
180 =cut
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
181
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
182 $progname = $0;
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
183 $progname =~ s,.*[\\/],,; # use basename only
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
184 $progname =~ s/\.\w*$//; # strip extension, if any
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
185
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
186 $VERSION = "5.827";
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
187
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
188
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
189 require LWP;
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
190
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
191 use URI;
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
192 use URI::Heuristic qw(uf_uri);
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
193
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
194 use HTTP::Status qw(status_message);
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
195 use HTTP::Date qw(time2str str2time);
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
196
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
197
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
198 # This table lists the methods that are allowed. It should really be
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
199 # a superset for all methods supported for every scheme that may be
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
200 # supported by the library. Currently it might be a bit too HTTP
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
201 # specific. You might use the -f option to force a method through.
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
202 #
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
203 # "" = No content in request, "C" = Needs content in request
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
204 #
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
205 %allowed_methods = (
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
206 GET => "",
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
207 HEAD => "",
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
208 POST => "C",
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
209 PUT => "C",
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
210 DELETE => "",
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
211 TRACE => "",
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
212 OPTIONS => "",
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
213 );
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
214
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
215
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
216 # We make our own specialization of LWP::UserAgent that asks for
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
217 # user/password if document is protected.
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
218 {
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
219 package RequestAgent;
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
220 @ISA = qw(LWP::UserAgent);
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
221
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
222 sub new
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
223 {
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
224 my $self = LWP::UserAgent::new(@_);
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
225 $self->agent("lwp-request/$main::VERSION ");
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
226 $self;
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
227 }
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
228
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
229 sub get_basic_credentials
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
230 {
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
231 my($self, $realm, $uri) = @_;
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
232 if ($main::options{'C'}) {
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
233 return split(':', $main::options{'C'}, 2);
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
234 }
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
235 elsif (-t) {
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
236 my $netloc = $uri->host_port;
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
237 print "Enter username for $realm at $netloc: ";
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
238 my $user = <STDIN>;
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
239 chomp($user);
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
240 return (undef, undef) unless length $user;
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
241 print "Password: ";
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
242 system("stty -echo");
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
243 my $password = <STDIN>;
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
244 system("stty echo");
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
245 print "\n"; # because we disabled echo
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
246 chomp($password);
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
247 return ($user, $password);
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
248 }
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
249 else {
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
250 return (undef, undef)
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
251 }
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
252 }
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
253 }
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
254
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
255 $method = uc(lc($progname) eq "lwp-request" ? "GET" : $progname);
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
256
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
257 # Parse command line
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
258 use Getopt::Long;
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
259
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
260 my @getopt_args = (
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
261 'a', # content i/o in text(ascii) mode
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
262 'm=s', # set method
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
263 'f', # make request even if method is not in %allowed_methods
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
264 'b=s', # base url
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
265 't=s', # timeout
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
266 'i=s', # if-modified-since
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
267 'c=s', # content type for POST
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
268 'C=s', # credentials for basic authorization
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
269 'H=s@', # extra headers, form "Header: value string"
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
270 #
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
271 'u', # display method, URL and headers of request
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
272 'U', # display request headers also
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
273 's', # display status code
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
274 'S', # display whole chain of status codes
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
275 'e', # display response headers (default for HEAD)
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
276 'd', # don't display content
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
277 #
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
278 'h', # print usage
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
279 'v', # print version
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
280 #
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
281 'p=s', # proxy URL
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
282 'P', # don't load proxy setting from environment
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
283 #
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
284 'o=s', # output format
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
285 );
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
286
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
287 Getopt::Long::config("noignorecase", "bundling");
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
288 unless (GetOptions(\%options, @getopt_args)) {
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
289 usage();
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
290 }
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
291 if ($options{'v'}) {
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
292 require LWP;
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
293 my $DISTNAME = 'libwww-perl-' . LWP::Version();
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
294 die <<"EOT";
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
295 This is lwp-request version $VERSION ($DISTNAME)
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
296
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
297 Copyright 1995-1999, Gisle Aas.
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
298
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
299 This program is free software; you can redistribute it and/or
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
300 modify it under the same terms as Perl itself.
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
301 EOT
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
302 }
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
303
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
304 usage() if $options{'h'} || !@ARGV;
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
305
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
306 # Create the user agent object
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
307 $ua = RequestAgent->new;
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
308
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
309 # Load proxy settings from *_proxy environment variables.
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
310 $ua->env_proxy unless $options{'P'};
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
311
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
312 $method = uc($options{'m'}) if defined $options{'m'};
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
313
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
314 if ($options{'f'}) {
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
315 if ($options{'c'}) {
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
316 $allowed_methods{$method} = "C"; # force content
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
317 }
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
318 else {
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
319 $allowed_methods{$method} = "";
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
320 }
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
321 }
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
322 elsif (!defined $allowed_methods{$method}) {
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
323 die "$progname: $method is not an allowed method\n";
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
324 }
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
325
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
326 if ($method eq "HEAD") {
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
327 $options{'s'} = 1;
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
328 $options{'e'} = 1 unless $options{'d'};
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
329 $options{'d'} = 1;
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
330 }
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
331
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
332 if (defined $options{'t'}) {
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
333 $options{'t'} =~ /^(\d+)([smh])?/;
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
334 die "$progname: Illegal timeout value!\n" unless defined $1;
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
335 $timeout = $1;
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
336 if (defined $2) {
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
337 $timeout *= 60 if $2 eq "m";
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
338 $timeout *= 3600 if $2 eq "h";
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
339 }
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
340 $ua->timeout($timeout);
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
341 }
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
342
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
343 if (defined $options{'i'}) {
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
344 if (-e $options{'i'}) {
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
345 $time = (stat _)[9];
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
346 }
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
347 else {
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
348 $time = str2time($options{'i'});
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
349 die "$progname: Illegal time syntax for -i option\n"
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
350 unless defined $time;
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
351 }
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
352 $options{'i'} = time2str($time);
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
353 }
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
354
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
355 $content = undef;
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
356 if ($allowed_methods{$method} eq "C") {
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
357 # This request needs some content
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
358 unless (defined $options{'c'}) {
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
359 # set default content type
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
360 $options{'c'} = ($method eq "POST") ?
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
361 "application/x-www-form-urlencoded"
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
362 : "text/plain";
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
363 }
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
364 else {
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
365 die "$progname: Illegal Content-type format\n"
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
366 unless $options{'c'} =~ m,^[\w\-]+/[\w\-.+]+(?:\s*;.*)?$,
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
367 }
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
368 print "Please enter content ($options{'c'}) to be ${method}ed:\n"
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
369 if -t;
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
370 binmode STDIN unless -t or $options{'a'};
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
371 $content = join("", <STDIN>);
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
372 }
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
373 else {
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
374 die "$progname: Can't set Content-type for $method requests\n"
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
375 if defined $options{'c'};
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
376 }
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
377
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
378 # Set up a request. We will use the same request object for all URLs.
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
379 $request = HTTP::Request->new($method);
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
380 $request->header('If-Modified-Since', $options{'i'}) if defined $options{'i'};
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
381 for my $user_header (@{ $options{'H'} || [] }) {
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
382 my ($header_name, $header_value) = split /:\s*/, $user_header, 2;
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
383 $request->header($header_name, $header_value);
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
384 $ua->agent($header_value) if lc($header_name) eq "user-agent"; # Ugh!
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
385 }
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
386 #$request->header('Accept', '*/*');
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
387 if ($options{'c'}) { # will always be set for request that wants content
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
388 $request->header('Content-Type', $options{'c'});
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
389 $request->header('Content-Length', length $content); # Not really needed
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
390 $request->content($content);
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
391 }
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
392
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
393 $errors = 0;
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
394
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
395 # Ok, now we perform the requests, one URL at a time
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
396 while ($url = shift) {
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
397 # Create the URL object, but protect us against bad URLs
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
398 eval {
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
399 if ($url =~ /^\w+:/ || $options{'b'}) { # is there any scheme specification
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
400 $url = URI->new($url, $options{'b'});
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
401 $url = $url->abs($options{'b'}) if $options{'b'};
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
402 }
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
403 else {
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
404 $url = uf_uri($url);
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
405 }
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
406 };
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
407 if ($@) {
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
408 $@ =~ s/ at .* line \d+.*//;
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
409 print STDERR $@;
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
410 $errors++;
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
411 next;
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
412 }
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
413
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
414 $ua->proxy($url->scheme, $options{'p'}) if $options{'p'};
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
415
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
416 # Send the request and get a response back from the server
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
417 $request->uri($url);
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
418 $response = $ua->request($request);
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
419
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
420 if ($options{'S'}) {
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
421 for my $r ($response->redirects, $response) {
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
422 my $method = $r->request->method;
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
423 my $url = $r->request->uri->as_string;
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
424 print "$method $url";
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
425 if ($options{'e'}) {
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
426 print "\n";
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
427 }
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
428 else {
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
429 print " --> ", $r->status_line, "\n";
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
430 }
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
431 print $r->request->headers_as_string, "\n" if $options{'U'};
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
432 if ($options{'e'}) {
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
433 # Display headers
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
434 print " ===> ", $r->status_line, "\n";
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
435 print $r->headers_as_string;
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
436 print "\n"; # separate headers and content
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
437 }
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
438 }
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
439 }
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
440 else {
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
441 if ($options{'u'} || $options{'U'}) {
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
442 my $url = $response->request->uri->as_string;
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
443 print "$method $url\n";
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
444 print $response->request->headers_as_string, "\n" if $options{'U'};
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
445 }
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
446 if ($options{'s'}) {
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
447 print $response->status_line, "\n";
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
448 }
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
449 if ($options{'e'}) {
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
450 # Display headers
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
451 print $response->headers_as_string;
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
452 print "\n"; # separate headers and content
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
453 }
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
454 }
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
455
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
456 unless ($options{'d'}) {
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
457 if ($options{'o'} &&
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
458 $response->content_type eq 'text/html') {
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
459 eval {
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
460 require HTML::Parse;
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
461 };
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
462 if ($@) {
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
463 if ($@ =~ m,^Can't locate HTML/Parse.pm in \@INC,) {
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
464 die "The HTML-Tree distribution need to be installed for the -o option to be used.\n";
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
465 }
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
466 else {
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
467 die $@;
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
468 }
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
469 }
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
470 my $html = HTML::Parse::parse_html($response->content);
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
471 {
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
472 $options{'o'} eq 'ps' && do {
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
473 require HTML::FormatPS;
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
474 my $f = HTML::FormatPS->new;
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
475 print $f->format($html);
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
476 last;
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
477 };
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
478 $options{'o'} eq 'text' && do {
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
479 require HTML::FormatText;
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
480 my $f = HTML::FormatText->new;
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
481 print $f->format($html);
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
482 last;
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
483 };
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
484 $options{'o'} eq 'html' && do {
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
485 print $html->as_HTML;
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
486 last;
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
487 };
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
488 $options{'o'} eq 'links' && do {
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
489 my $base = $response->base;
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
490 $base = $options{'b'} if $options{'b'};
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
491 for ( @{ $html->extract_links } ) {
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
492 my($link, $elem) = @$_;
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
493 my $tag = uc $elem->tag;
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
494 $link = URI->new($link)->abs($base)->as_string;
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
495 print "$tag\t$link\n";
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
496 }
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
497 last;
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
498 };
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
499 $options{'o'} eq 'dump' && do {
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
500 $html->dump;
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
501 last;
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
502 };
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
503 # It is bad to not notice this before now :-(
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
504 die "Illegal -o option value ($options{'o'})\n";
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
505 }
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
506 }
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
507 else {
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
508 binmode STDOUT unless $options{'a'};
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
509 print $response->content;
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
510 }
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
511 }
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
512
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
513 $errors++ unless $response->is_success;
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
514 }
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
515
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
516 exit $errors;
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
517
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
518
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
519 sub usage
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
520 {
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
521 die <<"EOT";
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
522 Usage: $progname [-options] <url>...
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
523 -m <method> use method for the request (default is '$method')
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
524 -f make request even if $progname believes method is illegal
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
525 -b <base> Use the specified URL as base
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
526 -t <timeout> Set timeout value
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
527 -i <time> Set the If-Modified-Since header on the request
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
528 -c <conttype> use this content-type for POST, PUT, CHECKIN
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
529 -a Use text mode for content I/O
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
530 -p <proxyurl> use this as a proxy
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
531 -P don't load proxy settings from environment
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
532 -H <header> send this HTTP header (you can specify several)
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
533 -C <username>:<password>
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
534 provide credentials for basic authentication
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
535
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
536 -u Display method and URL before any response
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
537 -U Display request headers (implies -u)
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
538 -s Display response status code
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
539 -S Display response status chain
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
540 -e Display response headers
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
541 -d Do not display content
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
542 -o <format> Process HTML content in various ways
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
543
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
544 -v Show program version
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
545 -h Print this message
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
546 EOT
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
547 }