如何捕获ColdFusion CFHTTP超时异常?
我有一个向外部API发出远程请求的页面。我有时在发出请求时会收到请求超时,因此,我计划在CFHTTP标记中设置一个低于默认requesttimeout设置的超时,并捕获它。然而,我无法让我的CFTRY/CFCATCH捕捉到它。这是我的伪代码:如何捕获ColdFusion CFHTTP超时异常?,coldfusion,try-catch,cfml,coldfusion-11,timeoutexception,Coldfusion,Try Catch,Cfml,Coldfusion 11,Timeoutexception,我有一个向外部API发出远程请求的页面。我有时在发出请求时会收到请求超时,因此,我计划在CFHTTP标记中设置一个低于默认requesttimeout设置的超时,并捕获它。然而,我无法让我的CFTRY/CFCATCH捕捉到它。这是我的伪代码: private void function makeRequest(){ cfhttp( url="https://api.somesite.com/", method=&
private void function makeRequest(){
cfhttp(
url="https://api.somesite.com/",
method="POST",
timeout="1",
throwonerror="true",
result="LOCAL.ApiHttpResult"
) {
...
}
}
public void function tryRequest() {
try {
makeRequest();
}
catch(coldfusion.runtime.RequestTimeoutException e) {
abort;
}
}
我从CFSCRIPT中得到了相同的结果:
<cffunction access="public" returntype="void" name="tryRequest">
<cftry>
<cfscript>
makeRequest();
</cfscript>
<cfcatch type="coldfusion.runtime.RequestTimeoutException">
<cfabort />
</cfcatch>
</cffunction>
makeRequest();
CFHTTP超时是否有什么特别之处,使得无法通过编程方式捕获?有什么办法吗
谢谢……更多的评论,但这太长了。不管发生什么异常,都要做一个转储。然后根据特定的异常进行筛选
public void function tryRequest() {
try {
makeRequest();
}
catch(any e) {
writedump(e);
// then find the details on the specific exception type
}
}
更多的是评论,但这太长了。不管发生什么异常,都要做一个转储。然后根据特定的异常进行筛选
public void function tryRequest() {
try {
makeRequest();
}
catch(any e) {
writedump(e);
// then find the details on the specific exception type
}
}
您刚刚拼错了异常类型:它是coldfusion.runtime.RequestTimedOutException(
coldfusion.runtime.RequestTimedOutException
)
但是有另一种方法可以做到这一点,而不需要异常处理。只需执行常规cfhttp,但不要指定throwOnError
属性(或将其保留为false
)。请求超时后,仍将返回响应结构。它将填充状态代码408请求超时
。您可以这样访问它:
if (left(LOCAL.ApiHttpResult.Statuscode, 3) eq "408") {
writeOutput("HTTP request timed out");
} else {
writeOutput("HTTP request successful with status: #LOCAL.ApiHttpResult.Statuscode#");
}
您刚刚拼错了异常类型:它是coldfusion.runtime.RequestTimedOutException(
coldfusion.runtime.RequestTimedOutException
)
但是有另一种方法可以做到这一点,而不需要异常处理。只需执行常规cfhttp,但不要指定throwOnError
属性(或将其保留为false
)。请求超时后,仍将返回响应结构。它将填充状态代码408请求超时
。您可以这样访问它:
if (left(LOCAL.ApiHttpResult.Statuscode, 3) eq "408") {
writeOutput("HTTP request timed out");
} else {
writeOutput("HTTP request successful with status: #LOCAL.ApiHttpResult.Statuscode#");
}
哦,酷。我今天要试试这个!希望能够接受你的回答。哦,酷。我今天要试试这个!希望能够接受你的答案。我意识到我可以这样做,但做字符串搜索感觉很困难。但这可能是我唯一的选择。我意识到我可以这样做,但做字符串搜索感觉很困难。不过,这可能是我唯一的选择。