Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

Simple HTTP Client module for D2 (phobos).

branch: master

Fetching latest commit…

Octocat-spinner-32-eaf2f5

Cannot retrieve the latest commit at this time

Octocat-spinner-32 examples
Octocat-spinner-32 README
Octocat-spinner-32 TODO
Octocat-spinner-32 dhttpclient.d
README
dhttpclient

Simple socket wrapper, which allows download data and send GET/POST
requests.

Sources;
   - http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol
   - http://en.wikipedia.org/wiki/List_of_HTTP_status_codes
   - http://en.wikipedia.org/wiki/Chunked_transfer_encoding
   - http://www.faqs.org/rfcs/rfc2616.html

Author:  Bystroushaak (bystrousak@kitakitsune.org)
Version: 1.7.2
Date:    23.06.2012

= API: =========================================================================
string[string] FFHeaders;
	Headers from firefox 3.6.13 on windows

string[string] LFFHeaders;
	Headers from firefox 3.6.13 on Linux

string[string] IEHeaders;
	Headers from Internet Explorer 7.0 on Windows NT 6.0

string[string] DefaultHeaders;
	Headers which will be used with new instances of DHTTPClient.

	If you want different headers for all your future instances of DHTTPClient, 
	just do something like

	---
		dhttpclient.DefaultHeaders = dhttpclient.IEHeaders;
	---
	
	Standard value is FFHeaders.

	See Also:
		FFHeaders

class HTTPClientException: object.Exception;
	General exception for all exceptions throwed from this module.

	If you want catch all subexceptions (URLException, 	InvalidStateException, 
	StatusCodeException), use this exception.

	---
		try{
		  DHTTPClient d = new DHTTPClient();
		  ...
		}catch(HTTPClientException){
		  // this catch all exceptions which are throwed from DHTTPClient
		}
	---

class URLException: dhttpclient.HTTPClientException;
	This exception is throwed when isn't possible parse or download given page, 
	or is used unknown protocol, etc..

class InvalidStateException: dhttpclient.HTTPClientException;

class StatusCodeException: dhttpclient.HTTPClientException;
	This exception is thrown, when server return StatusCode different than 
	200 (Ok), or 301 (Redirection).

	Exception contains informations about StatusCode and data returned
	by server.
	
	---
		uint getStatusCode();
			Returns given StatusCode

		string getData();
			Returns data downloaded from server
	---

class ParsedURL;
	Class for parsing url.

class HTTPClient;
	Class which allows download data and send GET and POST requests.


	void setTcpSocketCreator(TcpSocket function(string domain, ushort port) fn);
		Set TCP Socket creator. Normally, with each request is created new 
		TcpSocket object. Sometimes is useful have option to set own (for 
		example https support, proxy ..).

		Argument fn is pointer to function, which returns TcpSocket and accepts 
		two parameters domain and port (classic TcpSocket parameters).

		Default is function(string domain, ushort port){
			return new TcpSocket(new InternetAddress(domain, port));
		};

		See Also:
			TcpSocket


	string get(string URL, string[string] params = null);
		Downloads given URL.

		If there are some parameters, send them as GET data.

		Example:
		
		---
			HTTPClient cl = new HTTPClient();
			cl.get("http://google.com");
		---
		
		or
		
		---
			cl.get("http://google.com", ["query":"dhttpclient"]);
		---
		
		After each request it is possible to get server
		headers with getResponseHeaders().

		Returns:
			Data from server.

		Throws:
			URLException, if isn't set ignore_redirect and when server redirect 
			to server which redirect .. more than is set by setMaxRecursion().

			HTTPClientException when things goes bad.

			StatusCodeException if server returns headers with code different 
			from 200 (Ok), or 301 (Redirect).

		See Also:
			getResponseHeaders()


	string post(string URL, string[string] params);
		Send POST data to server and return given data.

		Example:

		---
			HTTPClient cl = new HTTPClient();
			cl.post("http://some.server/script.php", ["TYPE":"POST"]);
		---
		
		After each request is possible get server header with 
		getResponseHeaders().

		Returns:
			Data from server.

		Throws:
			URLException, if isn't set ignore_redirect and when server redirect 
			to server which redirect .. more than is set by setMaxRecursion().

			HTTPClientException when things goes bad.

			StatusCodeException if server returns headers with code different 
			from 200 (Ok), or 301 (Redirect).

		See Also:
			getResponseHeaders()


	string getAndPost(string URL, string[string] get, string[string] post);
		Send GET and POST data in one request.

		Returns:
			Data from server.

		Throws:
			URLException, if isn't set ignore_redirect and when server redirect 
			to server which redirect .. more than is set by setMaxRecursion().

			HTTPClientException when things goes bad.

			StatusCodeException if server returns headers with code different 
			from 200 (Ok), or 301 (Redirect).

			See Also:
				HTTPClient.get()
				HTTPClient.post()
				getResponseHeaders()


	string[string] getResponseHeaders();
		Return server headers from request.

		Throws:
			InvalidStateException if request wasn't send yet.


	string[string] getClientHeaders();
		Return headers which client sends each request.


	void setClientHeaders(string[string] iheaders);
		Set headers which will client send each request.

		Headers can´t contain Content-Length and Host headers.


	bool getIgnoreRedirect();


	void setIgnoreRedirect(bool ir);
		If is set (true), client ignore StatusCode 301 and doesn't redirect.

		This could be useful, because some pages return's interesting content 
		which you can't normally see :)


	void allowHttps(bool state);
	bool allowHttps();
		Allow https protocol !! IN URL !!.

		Even if you allow https with this switch, you will still need to implement
		SLL with setTcpSocketCreator() and SSL library.


	uint getMaxRecursion();


	void setMaxRecursion(uint mr);
		Set max. redirect in one request.

		Default is 8.
= /API =========================================================================



= Examples: ====================================================================
Initialization;

---
	import dhttpclient;

	HTTPClient cl = new HTTPClient();
---

Download page with timestamp;

---
	writeln(cl.get("http://kitakitsune.org/proc/time.php"));
---

output;

---
1298758706
---

If I want to see headers from server;

---
	writeln(cl.getResponseHeaders());
---

output;

---
	X-Powered-By:PHP/5.3.3-4 Keep-Alive:timeout=15, max=100 Date:Tue, 11 Jan 2011 20:06:25 GMT Vary:Accept-Encoding Content-Length:17 Connection:Keep-Alive Content-Type:text/html StatusCode:200 OK Server:Apache
---

Send GET data;

---
	string[string] get_data = ["Type" : "GET"];
	get_data["More data"] = "Some more data";
	writeln(cl.get("http://bit.ly/gX0v4M", get_data));
---

output;

---
	GET:
	 More_data=Some more data
	 Type=GET
	POST:
---

Send POST data;

---
	string[string] post_data = ["Type" : "POST"];
	writeln(cl.post("http://bit.ly/gX0v4M", post_data));
---

output;

---
	GET:
	POST:
	 Type=POST
---

Send GET and POST data;

---
	writeln(cl.getAndPost("http://bit.ly/gX0v4M", get_data, post_data));
---

output;

---
	GET:
	 More_data=Some more data
	 Type=GET
	POST:
	 Type=POST
---

Disable redirection;

---
	cl.setIgnoreRedirect(true);
	writeln(cl.getAndPost("http://bit.ly/gX0v4M", get_data, post_data));
	writeln(cl.getClientHeaders());
---

output;

---
	<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
	<HTML>
	<HEAD>
	<TITLE>Moved</TITLE>
	</HEAD>
	<BODY>
	<H2>Moved</H2>
	<A HREF="http://kitakitsune.org/bhole/parametry.php">The requested URL has moved here.</A>
	<P ALIGN=RIGHT><SMALL><I>AOLserver/4.5.1 on http://127.0.0.1:7300</I></SMALL></P>
	</BODY>
	</HTML>
	Keep-Alive:300 Connection:keep-alive Accept-Language:cs,en-us;q=0.7,en;q=0.3 Accept:text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain User-Agent:Mozilla/5.0 (Windows; U; Windows NT 5.1; cs; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.13 Accept-Charset:utf-8
---

= /Examples ====================================================================

Page generated by [1]Ddoc. This work is licensed under a CC BY
(http://creativecommons.org/licenses/by/3.0/). This means that you can do
whatever you want, but you have to add authors name. If you dont like this
licence, send me email and I can release module under different
conditions.

Visible links
	1. http://www.digitalmars.com/d/2.0/ddoc.html
Something went wrong with that request. Please try again.