/********************************************************************
* Leverages the Apache HTTPClient library to perform simple http
* and https GET operations from OScript.
*
* Note: The Apahce library supports many more features than this
* simple HTTP GET style operations. These include BASIC,
* Digest and form based authentication, performing POST
* operations, etc. I only needed the ability to do a GET
* so I implmeneted it driectly in OScript Here. If you want
* to do more complex operations, I would strongly suggest
* implementing it in Java and then using JavaObject to
* leverage your Java class library.
*
* Prerequisites:
*
* 1. You have downloaded the Apahce HTTPClient library from:
* http://hc.apache.org/httpcomponents-client-ga
* 2. You have added the seven jar files to Livelink's classpath
* by (a) dropping them in an 'ojlib' folder of your module
* or (b) dropping them in [OTHOME]/ojlib
* 3. If you want Java commands to work when running builder,
* don't forget to add '-loadjavavm' to your Builder shortcut.
* (right click on the Builder shortcut, properties, target)
*
* Example Usage:
*
* String url = "http://www.google.com"
* Assoc retVal = $aaamod.Utils.HttpGet(url)
* if (retVal.OK)
* echo(retVal.Data)
* else
* echo(Str.Format("Error fetching %1! %2.", url, retVal.ErrMsg)
* end
* url = "https://www.google.com"
* retVal = $aaamod.Utils.HttpGet(url)
* if (retVal.OK)
* echo(retVal.Data)
* else
* echo(Str.Format("Error fetching %1! %2.", url, retVal.ErrMsg)
* end
*
* Input Parameters:
*
* url - The URL you want to GET
*
* Output Parameters:
*
* retVal.Ok - Indiacates whether the operation worked
* retVal.ErrMsg - Error message for failed operations.
* retVal.ApiError - Actual error object if available.
* retVal.Url - Url fetched
* retVal.Data - Content of the web page as a String.
*
********************************************************************/
function Assoc HTTPGet(String url = "https://www.google.com")
Assoc retVal
retVal.Ok = false
retVal.ErrMsg = Undefined
retVal.ApiError = Undefined
retVal.Data = Undefined
Dynamic jo = JavaObject
JavaObject request, response, content
String data
//build request object
request = jo.InvokeStaticMethod("org.apache.http.client.fluent.Request","Get", { url })
if (IsError(request))
retVal.ErrMsg = Str.Format("%1", request)
retVal.ApiError = request
else
//build response object from request
response = request.InvokeMethod("execute", {})
if (IsError(response))
retVal.ErrMsg = Str.Format("%1", response)
retVal.ApiError = response
else
//get content object from response
content = response.InvokeMethod("returnContent", {})
if (IsError(content))
retVal.ErrMsg = Str.Format("%1", content)
retVal.ApiError = content
else
//read text of web page into data
data = content.InvokeMethod("asString", {})
if (IsError(data))
retVal.ErrMsg = Str.Format("%1", content)
retVal.ApiError = content
else
retVal.Ok = true
retVal.Url = url
retVal.Data = data
end
end
end
end
if (!retVal.Ok)
if (IsUndefined(retVal.ErrMsg))
retVal.ErrMsg = "Unexpected error occurred in HTTPGet"
end
end
return retVal
end
Comments