JSOUP URL 在 coldfusion 中连接错误

JSOUP URL connect errors in coldfusion

我尝试使用 JSOUP,下面我提到了我的代码

Application.cfc 作为

<cfset this.name = "jsoupApp11111">
<cfset this.javasettings = { loadpaths = [#expandPath("./jsoup-1.12.1.jar")#],reloadOnchange = true}>

CFM 文件为


<cfset jsoupObj = createObject("java","org.jsoup.Jsoup")>
<cfset testURL = 'https://en.wikipedia.org/wiki/List_of_countries_by_population_(United_Nations)'>
<cfset connectUrlSite = jsoupObj.connect(testURL).get() >
<cfset getUrlSiteBody = connectUrlSite.body() >
 <cfoutput>
    #connectUrlSite.title()#"
 </cfoutput>

<cfloop array="#getUrlSiteBody.select('img')#" index="i">
    <cfoutput>
        #i#
    </cfoutput>
</cfloop>

上面的 Wikipedia 站点 URL 运行良好,当我尝试对其他一些网站执行相同操作时,我收到类似 Received fatal alert: handshake_failur 的错误消息 和其他一些网站在 jsoupObj.connect(testURL) 过程中抛出类似 PKIX path validation failed 错误的错误消息。我不确定我错过了哪个或者我会在哪个地方获得有关此类错误的更多详细信息。

使用 http 而不是 https 后的错误消息

每个答案都非常有价值和有帮助。

提前致谢!

您遗漏了一些相关信息(例如您的 java 版本),但一般来说,这些 https 错误是由于 JSoup 无法与目标服务器建立安全连接造成的。

收到致命警报:handshake_failure

我能够用 java 1.8.0_72 重现错误。启用调试,即 -Djavax.net.debug=all,确认它是由 SNI server_name extension bug. Updating the JVM used by CF 到版本 1.8.0_141 或更高版本引起的,解决了问题。

  • Java 1.8.0_144(固定)

    *** ClientHello, TLSv1.2
    ...
    Extension signature_algorithms, signature_algorithms: ...
    Extension server_name, server_name: [type=host_name (0), value=trycf.com]
    ***
    
  • Java 1.8.0_72(缺少server_name)

    *** ClientHello, TLSv1.2
    ...
    Extension signature_algorithms, signature_algorithms: ...
    ***
    

HTTP 提取错误 URL。状态=403

HTTP状态码403表示请求被禁止。在这种情况下,请求被拒绝,因为 user-agent value is empty. See the documentation on adding a user agent

请记住,有些网站故意拒绝此类请求以防止屏幕抓取。因此,请先检查网站的条款和条件,看看是否禁止编程访问。

PKIX 路径验证失败

您需要提供导致错误的 URL 以便我们更加具体,但通常它表示证书丢失或无效的问题。另见 How to Resolve Java HTTPS Exceptions