1 /*******************************************************************************
2 3 copyright: Copyright (c) 2004 Kris Bell. All rights reserved
4 5 license: BSD style: $(LICENSE)
6 7 version: Initial release: January 2006
8 9 author: Kris
10 11 *******************************************************************************/12 13 moduletango.net.http.HttpGet;
14 15 publicimporttango.net.Uri;
16 17 privateimporttango.net.http.HttpClient,
18 tango.net.http.HttpHeaders;
19 20 /*******************************************************************************
21 22 Supports the basic needs of a client making requests of an HTTP
23 server. The following is a usage example:
24 ---
25 // open a web-page for reading (see HttpPost for writing)
26 auto page = new HttpGet ("http://www.digitalmars.com/d/intro.html");
27 28 // retrieve and flush display content
29 Cout (cast(char[]) page.read) ();
30 ---
31 32 *******************************************************************************/33 34 classHttpGet : HttpClient35 {
36 aliasHttpClient.readread;
37 38 /***********************************************************************
39 40 Create a client for the given URL. The argument should be
41 fully qualified with an "http:" or "https:" scheme, or an
42 explicit port should be provided.
43 44 ***********************************************************************/45 46 this (const(char)[] url)
47 {
48 this (newUri(url));
49 }
50 51 /***********************************************************************
52 53 Create a client with the provided Uri instance. The Uri should
54 be fully qualified with an "http:" or "https:" scheme, or an
55 explicit port should be provided.
56 57 ***********************************************************************/58 59 this (Uriuri)
60 {
61 super (HttpClient.Get, uri);
62 63 // enable header duplication64 getResponseHeaders().retain (true);
65 }
66 67 /***********************************************************************
68 69 ***********************************************************************/70 71 void[] read ()
72 {
73 autobuffer = super.open();
74 try {
75 if (super.isResponseOK())
76 buffer.load (getResponseHeaders().getInt(HttpHeader.ContentLength));
77 } finally {super.close();}
78 returnbuffer.slice();
79 }
80 }
81 82 83 /*******************************************************************************
84 85 *******************************************************************************/86 87 debug (HttpGet)
88 {
89 importtango.io.Console;
90 91 voidmain()
92 {
93 // open a web-page for reading (see HttpPost for writing)94 autopage = newHttpGet ("http://www.digitalmars.com/d/intro.html");
95 96 // retrieve and flush display content97 Cout (cast(char[]) page.read) ();
98 99 foreach (header; page.getResponseHeaders)
100 Cout (header.name.value) (header.value).newline;
101 }
102 }