📄 http.java
字号:
if (pResult.optionTimes(FILE) > 0)
{
res = STAFUtil.resolveRequestVar(
pResult.optionValue(FILE), sHandle, info.requestNumber);
if (res.rc != STAFResult.Ok) return res;
toFile = res.result;
}
String toMachine = null;
if (pResult.optionTimes(TOMACHINE) > 0)
{
res = STAFUtil.resolveRequestVar(
pResult.optionValue(TOMACHINE), sHandle, info.requestNumber);
if (res.rc != STAFResult.Ok) return res;
toMachine = res.result;
}
// Send request
try
{
session.requestMethod(url, method, headers, params, files, content,
redirect, toFile, toMachine);
}
catch (MalformedURLException e)
{
if (e.getMessage() != null)
{
if (e.getMessage().equals("Bad Method"))
return new STAFResult(INVALIDMETHOD, method);
if (e.getMessage().startsWith("Invalid URI"))
return new STAFResult(UNKNOWNHOST, e.getMessage());
if (e.getMessage().startsWith("Invalid protocol"))
return new STAFResult(IOEXCEPTION, e.getMessage());
}
return new STAFResult(STAFResult.InvalidRequestString, e.getMessage());
}
catch (HttpException e)
{
return new STAFResult(STAFResult.UserDefined,
e.getMessage());
}
catch(UnknownHostException uhe)
{
return new STAFResult(UNKNOWNHOST, "Unknown Host: " + url);
}
catch(ConnectException ce)
{
return new STAFResult(CONNECTERROR, "Connection Refused: " + url);
}
catch (FileNotFoundException e)
{
// error in getting files to be added to a post
return new STAFResult(STAFResult.FileOpenError, e.getMessage());
}
catch (IOException e)
{
// error getting page
// XXX this is a hack
// invalid url error not coming back correctly
if ((e.getMessage() != null) && (e.getMessage().equals(url)))
return new STAFResult(UNKNOWNHOST, "Unknown Host: " + url);
// Return the Java stack trace in the result
StringWriter sr = new StringWriter();
e.printStackTrace(new PrintWriter(sr));
return new STAFResult(
IOEXCEPTION, "Error getting target url\n" + e + "\n" +
sr.toString());
}
catch (STAFException e)
{
return new STAFResult(e.rc, e.getMessage());
}
catch (Exception e)
{
// unexpected error
java.io.StringWriter sr = new java.io.StringWriter();
e.printStackTrace(new java.io.PrintWriter(sr));
System.err.println(sr.toString());
return new STAFResult(STAFResult.UserDefined,
"HttpClient Error\n" + e + "\n" + e.getMessage());
}
return getHttpResponse(info, pResult);
}
/*****************************************************************************/
/* */
/* Method: handleFormAction */
/* Description: performs the desired form interaction */
/* Parameters: info - request info passed to acceptRequest */
/* Returns: STAFResult.OK or the http result of submitting the form */
/* */
/*****************************************************************************/
private STAFResult handleFormAction(STAFServiceInterfaceLevel30.RequestInfo
info) throws STAFException
{
// Parse the request
STAFCommandParseResult pResult = htmlActionParser.parse(info.request);
if (pResult.rc != 0)
{
return new STAFResult(STAFResult.InvalidRequestString,
pResult.errorBuffer);
}
String formAction = "SUBMIT FORM";
if (pResult.optionTimes(RESET) > 0)
formAction = "RESET FORM";
// Verify the requester has at least trust level 3
STAFResult trustResult = STAFUtil.validateTrust(
3, fServiceName, formAction, fLocalMachineName, info);
if (trustResult.rc != STAFResult.Ok) return trustResult;
// Get resolved value for SESSION option and make sure it's an integer
STAFResult res = STAFUtil.resolveRequestVarAndCheckInt(
SESSION, pResult.optionValue(SESSION), sHandle, info.requestNumber);
if (res.rc != 0) return res;
int sessionId = Integer.parseInt(res.result);
WebSession session;
// Get the session
try
{
session = sessionList.getSession(sessionId);
}
catch (InvalidSessionIDException e)
{
return new STAFResult(STAFResult.DoesNotExist, e.getMessage());
}
if (!session.isOwner(info.stafInstanceUUID))
{
// Verify the requester has at least trust level 4 if not session owner
trustResult = STAFUtil.validateTrust(
4, fServiceName, formAction, fLocalMachineName, info);
if (trustResult.rc != STAFResult.Ok) return trustResult;
}
// Resolve auto redirection on 3XX returns
Boolean redirect = null;
if (pResult.optionTimes(AUTOREDIRECT) > 0)
redirect = new Boolean(true);
if (pResult.optionTimes(NOAUTOREDIRECT) > 0)
redirect = new Boolean(false);
String id = "";
int idType = -1;
if (pResult.optionTimes(ID) > 0)
{
res = STAFUtil.resolveRequestVar(
pResult.optionValue(ID), sHandle, info.requestNumber);
if (res.rc != 0) return res;
id = res.result;
idType = WebSession.ID_ID_TYPE;
}
else if (pResult.optionTimes(NAME) > 0)
{
res = STAFUtil.resolveRequestVar(
pResult.optionValue(NAME), sHandle, info.requestNumber);
if (res.rc != 0) return res;
id = res.result;
idType = WebSession.NAME_ID_TYPE;
}
else if (pResult.optionTimes(INDEX) > 0)
{
res = STAFUtil.resolveRequestVar(
pResult.optionValue(INDEX), sHandle, info.requestNumber);
if (res.rc != 0) return res;
id = res.result;
idType = WebSession.INDEX_ID_TYPE;
}
else
{
// default to the 1st form on the page
id = "1";
idType = WebSession.INDEX_ID_TYPE;
}
String result = "";
try
{
if (pResult.optionTimes(RESET) > 0)
{
session.resetForm(id, idType);
}else if (pResult.optionTimes(SUBMIT) > 0)
{
session.submitForm(id, idType, redirect);
return getHttpResponse(info, pResult);
}
}catch (InvalidElementIDException e)
{
return new STAFResult(STAFResult.DoesNotExist, e.getMessage());
}catch (MalformedURLException e)
{
if (e.getMessage() != null)
{
if (e.getMessage().equals("Bad Method"))
return new STAFResult(INVALIDMETHOD, e.getMessage());
if (e.getMessage().startsWith("Invalid URI"))
return new STAFResult(UNKNOWNHOST, e.getMessage());
if (e.getMessage().startsWith("Invalid protocol"))
return new STAFResult(IOEXCEPTION, e.getMessage());
}
return new STAFResult(STAFResult.InvalidRequestString, e.getMessage());
}catch (HttpException e)
{
return new STAFResult(STAFResult.UserDefined,
e.getMessage());
}catch(UnknownHostException uhe)
{
return new STAFResult(UNKNOWNHOST, uhe.getMessage());
}catch(ConnectException ce)
{
return new STAFResult(CONNECTERROR, ce.getMessage());
}catch (FileNotFoundException e)
{
// error in getting files to be added to a post
return new STAFResult(STAFResult.FileOpenError, e.getMessage());
}catch (IOException e)
{
// error getting page
return new STAFResult(IOEXCEPTION,
"Error getting target url\n" + e + "\n" + e.getMessage());
}catch (Exception e)
{
// unexpected error
return new STAFResult(STAFResult.UserDefined,
"HttpClient Error\n" + e.getMessage());
}
return new STAFResult(STAFResult.Ok, result);
}
/*****************************************************************************/
/* */
/* Method: handleFollow */
/* Description: follows the specified link */
/* Parameters: info - request info passed to acceptRequest */
/* Returns: STAFResult with the http result of following the link */
/* */
/*****************************************************************************/
private STAFResult handleFollow(STAFServiceInterfaceLevel30.RequestInfo
info) throws STAFException
{
// Verify the requester has at least trust level 3
STAFResult trustResult = STAFUtil.validateTrust(
3, fServiceName, "FOLLOW", fLocalMachineName, info);
if (trustResult.rc != STAFResult.Ok) return trustResult;
// Parse the request
STAFCommandParseResult pResult = htmlActionParser.parse(info.request);
if (pResult.rc != 0)
{
return new STAFResult(STAFResult.InvalidRequestString,
pResult.errorBuffer);
}
// Get resolved value for SESSION option and make sure it's an integer
STAFResult res = STAFUtil.resolveRequestVarAndCheckInt(
SESSION, pResult.optionValue(SESSION), sHandle, info.requestNumber);
if (res.rc != 0) return res;
int sessionId = Integer.parseInt(res.result);
WebSession session;
// Get the session
try
{
session = sessionList.getSession(sessionId);
}
catch (InvalidSessionIDException e)
{
return new STAFResult(STAFResult.DoesNotExist, e.getMessage());
}
if (!session.isOwner(info.stafInstanceUUID))
{
// Verify the requester has at least trust level 4 if not session owner
trustResult = STAFUtil.validateTrust(
4, fServiceName, "FOLLOW", fLocalMachineName, info);
if (trustResult.rc != STAFResult.Ok) return trustResult;
}
// Resolve auto redirection on 3XX returns
Boolean redirect = null;
if (pResult.optionTimes(AUTOREDIRECT) > 0)
redirect = new Boolean(true);
if (pResult.optionTimes(NOAUTOREDIRECT) > 0)
redirect = new Boolean(false);
String id = "";
int idType = -1;
if (pResult.optionTimes(ID) > 0)
{
res = STAFUtil.resolveRequestVar(
pResult.optionValue(ID), sHandle, info.requestNumber);
if (res.rc != 0) return res;
id = res.result;
idType = WebSession.ID_ID_TYPE;
}
else if (pResult.optionTimes(NAME) > 0)
{
res = STAFUtil.resolveRequestVar(
pResult.optionValue(NAME), sHandle, info.requestNumber);
if (res.rc != 0) return res;
id = res.result;
idType = WebSessi
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -