This component is for downloading a single file from an HTTP server. Pick up data received from the server on its "outbox" outbox.
Generally you should use SimpleHTTPClient in preference to this.
How to use it:
Pipeline( SingleShotHTTPClient("http://www.google.co.uk/"), SomeComponentThatUnderstandsThoseMessageTypes() ).run()
If you want to use it directly, note that it doesn't output strings but ParsedHTTPHeader, ParsedHTTPBodyChunk and ParsedHTTPEnd like HTTPParser. This makes has the advantage of not buffering huge files in memory but outputting them as a stream of chunks. (with plain strings you would not know the contents of the headers or at what point that response had ended!)
SingleShotHTTPClient accepts a URL parameter at its creation (to __init__). When activated it creates an HTTPParser instance and then connects to the webserver specified in the URL using a TCPClient component. It sends an HTTP request and then any response from the server is received by the HTTPParser.
HTTPParser processes the response and outputs it in parts as:
ParsedHTTPHeader, ParsedHTTPBodyChunk, ParsedHTTPBodyChunk, ... ParsedHTTPBodyChunk, ParsedHTTPEnd
If SingleShotHTTPClient detects that the requested URL is a redirect page (using the Location header) then it begins this cycle anew with the URL of the new page, otherwise the parts of the page output by HTTPParser are sent on to "outbox".
This component downloads the pages corresponding to HTTP URLs received on "inbox" and outputs their contents (file data) as a message, one per URL, to "outbox" in the order they were received.
Type URLs, and they will be downloaded and placed, back to back in "downloadedfile.txt":
Pipeline( ConsoleReader(">>> ", ""), SimpleHTTPClient(), SimpleFileWriter("downloadedfile.txt"), ).run()
SimpleHTTPClient uses the Carousel component to create a new SingleShotHTTPClient component for every URL requested. As URLs are handled sequentially, it has only one SSHC child at anyone time.
Methods defined here
Create and link to a carousel object
Destroy child components and send producerFinished when we quit.
SingleShotHTTPClient() -> component that can download a file using HTTP by URL
Arguments: - starturl -- the URL of the file to download - [postbody] -- data to POST to that URL - if set to None becomes an empty body in to a POST (of PUT) request - [connectionclass] -- specify a class other than TCPClient to connect with - [method] -- the HTTP method for the request (default to GET normally or POST if postbody != ""
Methods defined here
Craft a HTTP request string for the supplied url
Check for a redirect response and queue the fetching the page it points to if it is such a response. Returns true if it was a redirect page and false otherwise.
Called repeatedly by main loop. Checks inboxes and processes messages received. Start the fetching of the new page if the current one is a redirect and has been completely fetched.
Connect to the remote HTTP server and send request
Close TCP connection and HTTP parser
Got a problem with the documentation? Something unclear that could be clearer? Want to help improve it? Constructive criticism is very welcome - especially if you can suggest a better rewording!
Please leave you feedback here in reply to the documentation thread in the Kamaelia blog.
-- Automatic documentation generator, 05 Jun 2009 at 03:01:38 UTC/GMT
This is an ongoing community based development site. As a result the contents of this page is the opinions of the contributors of the pages involved not the organisations involved. Specificially, this page may contain personal views which are not the views of the BBC. (the site is powered by a wiki engine)
(C) Copyright 2008 Kamaelia Contributors, including the British Broadcasting Corporation, All Rights Reserved.