// Copyright 1998-2014 Epic Games, Inc. All Rights Reserved. using System; using System.Diagnostics; using System.IO; using System.Net; using System.Text; namespace Tools.DotNETCommon.SimpleWebRequest { /// /// A class to make simple Xml web requests to return a string. /// public class SimpleWebRequest { /// /// Default constructor. /// public SimpleWebRequest() { } /// /// Create an HttpWebRequest with an optional Xml payload. /// /// The URL and parameters of the web request. /// The Xml data to attached to request, or null. /// A valid HttpWebRequest, or null for any failure. /// This uses the POST method with default credentials and a content type of 'text/xml'. static public HttpWebRequest CreateWebRequest( string WebRequestString, string Payload ) { HttpWebRequest Request = null; try { Request = ( HttpWebRequest )WebRequest.Create( WebRequestString ); Request.Method = "POST"; Request.UseDefaultCredentials = true; Request.SendChunked = false; if( Payload != null ) { byte[] Buffer = Encoding.UTF8.GetBytes( Payload ); Request.ContentType = "text/xml"; Request.ContentLength = Buffer.Length; Request.GetRequestStream().Write( Buffer, 0, Buffer.Length ); } else { Request.ContentLength = 0; } } catch( Exception Ex ) { Debug.WriteLine( "Exception in CreateRequest: " + Ex.Message ); Request = null; } return Request; } /// /// Get a string response from an HttpWebRequest. /// /// A valid HttpWebRequest. /// The string returned from the web request, or an empty string if there was an error. /// The response status code needs to be 'OK' for results to be processed. Also, this is designed for simple queries, /// so there is an arbitrary 1024 byte limit to the response size. static public string GetWebResponse( HttpWebRequest Request ) { string ResponseString = ""; try { HttpWebResponse WebResponse = ( HttpWebResponse )Request.GetResponse(); // Simple size check to prevent exploits if( WebResponse.StatusCode == HttpStatusCode.OK && WebResponse.ContentLength < 1024 ) { // Process the response Stream ResponseStream = WebResponse.GetResponseStream(); byte[] RawResponse = new byte[WebResponse.ContentLength]; ResponseStream.Read( RawResponse, 0, ( int )WebResponse.ContentLength ); ResponseStream.Close(); ResponseString = Encoding.UTF8.GetString( RawResponse ); } } catch( Exception Ex ) { Debug.WriteLine( "Exception in GetWebResponse: " + Ex.Message ); ResponseString = ""; } return ResponseString; } /// /// Send a web request to a web service and return a response string. /// /// The URL of the request with parameters. /// The Xml payload of the request (can be null). /// A string returned from the web request, or an empty string if there was any error. /// This calls CreateWebRequest and GetWebResponse internally. static public string GetWebServiceResponse( string WebRequestString, string Payload ) { string ResponseString = ""; if( WebRequestString != null ) { HttpWebRequest Request = CreateWebRequest( WebRequestString, Payload ); if( Request != null ) { ResponseString = GetWebResponse( Request ); } } return ResponseString; } } }