【问题标题】:How to catch a ColdFusion CFHTTP timeout exception?如何捕获 ColdFusion CFHTTP 超时异常?
【发布时间】:2020-06-25 19:33:40
【问题描述】:

我有一个向外部 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>

CFHTTP 超时是否有什么特别之处导致无法以编程方式捕获?关于如何做到这一点的任何想法?

谢谢....

【问题讨论】:

    标签: coldfusion try-catch cfml coldfusion-11 timeoutexception


    【解决方案1】:

    您只是拼错了异常类型:它是coldfusion.runtime.RequestTimedOutException (coldfusion.runtime.RequestTimedOutException)。

    但还有另一种方法可以在没有异常处理的情况下做到这一点。只需执行常规 cfhttp,但不要指定 throwOnError 属性(或保留 false)。请求超时后,这仍将返回响应结构。它将填充状态码408 Request Time-out。你可以这样访问它:

    if (left(LOCAL.ApiHttpResult.Statuscode, 3) eq "408") {
        writeOutput("HTTP request timed out");
    } else {
        writeOutput("HTTP request successful with status: #LOCAL.ApiHttpResult.Statuscode#");
    }
    

    【讨论】:

    • 太酷了。我今天要试试这个!希望能采纳你的回答。
    【解决方案2】:

    更多评论,但这太长了。无论发生什么异常,只需转储即可。然后过滤特定的异常

    public void function tryRequest() {
        try {
            makeRequest();
        }
        catch(any e) {
            writedump(e);
            // then find the details on the specific exception type
        }
    }
    

    【讨论】:

    • 我意识到我可以做到这一点,但做一个字符串搜索感觉很笨拙。不过,这可能是我唯一的选择。
    猜你喜欢
    • 2010-09-06
    • 1970-01-01
    • 2015-05-22
    • 1970-01-01
    • 2011-08-08
    • 2016-07-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-02
    相关资源
    最近更新 更多