如何捕获 ColdFusion CFHTTP 超时异常?
How to catch a ColdFusion CFHTTP timeout exception?
我有一个页面,我可以在其中向外部 API 发出远程请求。我有时会在发出请求时遇到请求超时,因此,我计划在 CFHTTP 标记中设置一个低于我的默认请求超时设置的超时并捕获它。但是,我无法让我的 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 超时的特殊情况导致无法以编程方式捕获?关于如何做到这一点有什么想法吗?
谢谢....
更多评论,但这太长了。无论发生什么异常,只要做一个转储。然后过滤特定的异常
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
)。在请求超时后,这仍然是 return 一个响应结构。它将填充状态代码 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#");
}
我有一个页面,我可以在其中向外部 API 发出远程请求。我有时会在发出请求时遇到请求超时,因此,我计划在 CFHTTP 标记中设置一个低于我的默认请求超时设置的超时并捕获它。但是,我无法让我的 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 超时的特殊情况导致无法以编程方式捕获?关于如何做到这一点有什么想法吗?
谢谢....
更多评论,但这太长了。无论发生什么异常,只要做一个转储。然后过滤特定的异常
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
)。在请求超时后,这仍然是 return 一个响应结构。它将填充状态代码 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#");
}