如何捕获ColdFusion CFHTTP超时异常?

如何捕获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=&

我有一个向外部API发出远程请求的页面。我有时在发出请求时会收到请求超时,因此,我计划在CFHTTP标记中设置一个低于默认requesttimeout设置的超时,并捕获它。然而,我无法让我的CFTRY/CFCATCH捕捉到它。这是我的伪代码:

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#");
}

哦,酷。我今天要试试这个!希望能够接受你的回答。哦,酷。我今天要试试这个!希望能够接受你的答案。我意识到我可以这样做,但做字符串搜索感觉很困难。但这可能是我唯一的选择。我意识到我可以这样做,但做字符串搜索感觉很困难。不过,这可能是我唯一的选择。