1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212
|
/*
* Modification History
*
* 2002-May-5 Jason Rohrer
* Created.
* Added a utility function for receiving data.
*
* 2002-May-12 Jason Rohrer
* Added support for fetching the final (after redirects) URL.
*
* 2002-May-26 Jason Rohrer
* Added support for fetching mime types and content length.
* Added a function for fetching MIME types alone.
*
* 2006-January-22 Jason Rohrer
* Added support for timeouts.
*
* 2008-September-25 Jason Rohrer
* Added POST.
*/
#include "minorGems/common.h"
#ifndef WEB_CLIENT_INCLUDED
#define WEB_CLIENT_INCLUDED
#include "minorGems/network/HostAddress.h"
#include "minorGems/network/Socket.h"
#include "minorGems/network/SocketClient.h"
#include "minorGems/network/SocketStream.h"
#include <string.h>
#include <stdio.h>
/**
* A class that implements a basic web client.
*
* @author Jason Rohrer.
*/
class WebClient {
public:
/**
* Gets a web page.
*
* @param inURL the URL to get as a \0-terminated string.
* Must be destroyed by caller if non-const.
* @param outContentLength pointer to where the length of the content,
* in bytes, should be returned.
* Useful for binary content which cannot be reliably terminated
* by \0.
* @param outFinalURL pointer to where the actual
* URL of the content (after following redirects) should be returned,
* or NULL to ignore the final URL. Defaults to NULL.
* The string returned in this location must be destroyed
* by caller.
* @param outMimeType pointer to where the MIME type
* of the content should be returned,
* or NULL to ignore the MIME type. Defaults to NULL.
* The string returned in this location must be destroyed
* by caller.
* @param inTimeoutInMilliseconds the timeout value when making
* the connection and again when reading data in milliseconds,
* or -1 for no timeout.
* Defaults to -1.
*
* @return the fetched web page as a \0-terminated string,
* or NULL if fetching the page fails.
* Must be destroyed by caller if non-NULL.
*/
static char *getWebPage( char *inURL,
int *outContentLength,
char **outFinalURL = NULL,
char **outMimeType = NULL,
long inTimeoutInMilliseconds = -1 );
/**
* Fetches a web page via POST.
*
* @param inURL the URL to post to as a \0-terminated string.
* Must be destroyed by caller if non-const.
* @param inPostBody the body of the post as \0-terminated string.
* Body must match MIME type application/x-www-form-urlencoded
* Must be destroyed by caller if non-const.
* @param outContentLength pointer to where the length of the content,
* in bytes, should be returned.
* Useful for binary content which cannot be reliably terminated
* by \0.
* @param outFinalURL pointer to where the actual
* URL of the content (after following redirects) should be returned,
* or NULL to ignore the final URL. Defaults to NULL.
* The string returned in this location must be destroyed
* by caller.
* @param outMimeType pointer to where the MIME type
* of the content should be returned,
* or NULL to ignore the MIME type. Defaults to NULL.
* The string returned in this location must be destroyed
* by caller.
* @param inTimeoutInMilliseconds the timeout value when making
* the connection and again when reading data in milliseconds,
* or -1 for no timeout.
* Defaults to -1.
*
* @return the fetched web page as a \0-terminated string,
* or NULL if fetching the page fails.
* Must be destroyed by caller if non-NULL.
*/
static char *getWebPagePOST( char *inURL,
char *inPostBody,
int *outContentLength,
char **outFinalURL = NULL,
char **outMimeType = NULL,
long inTimeoutInMilliseconds = -1 );
/**
* Gets the MIME type for a web page without fetching the content.
*
* @param inURL the URL to get as a \0-terminated string.
* Must be destroyed by caller if non-const.
*
* @return the fetched MIME type as a \0-terminated string,
* or NULL if fetching the page fails.
* Must be destroyed by caller if non-NULL.
*/
static char *getMimeType( char *inURL );
protected:
/**
* Receives data on a connection until the connection is closed.
*
* @param inSocketStream the stream to read from.
* Must be destroyed by caller.
* @param outContentLength pointer to where the length of the content,
* in bytes, should be returned.
* Useful for binary content which cannot be reliably terminated
* by \0.
*
* @return the received data as a \0-terminated string.
* Must be destroyed by caller.
*/
static char *receiveData( SocketStream *inSocketStream,
int *outContentLength );
/**
* Executes a web method.
*
* @param inMethod the method to execute (for example, GET or HEAD).
* Must be destroyed by caller if non-const.
* @param inURL the URL to get as a \0-terminated string.
* Must be destroyed by caller if non-const.
* @param inBody the request body as a \0-terminated string, or NULL
* for bodyless requests (like GET or HEAD).
* Body must match MIME type application/x-www-form-urlencoded
* Must be destroyed by caller if non-const and not NULL.
* @param outContentLength pointer to where the length of the content,
* in bytes, should be returned.
* Useful for binary content which cannot be reliably terminated
* by \0.
* @param outFinalURL pointer to where the actual
* URL of the content (after following redirects) should be returned,
* or NULL to ignore the final URL. Defaults to NULL.
* The string returned in this location must be destroyed
* by caller.
* @param outMimeType pointer to where the MIME type
* of the content should be returned,
* or NULL to ignore the MIME type. Defaults to NULL.
* The string returned in this location must be destroyed
* by caller.
* @param inTimeoutInMilliseconds the timeout value when making
* the connection and again when reading data in milliseconds,
* or -1 for no timeout.
* Defaults to -1.
*
* @return the fetched web page as a \0-terminated string,
* or NULL if fetching the page fails.
* Must be destroyed by caller if non-NULL.
*/
static char *executeWebMethod( char *inMethod, char *inURL,
char *inBody,
int *outContentLength,
char **outFinalURL = NULL,
char **outMimeType = NULL,
long inTimeoutInMilliseconds = -1 );
};
#endif
|