【问题标题】:CFHTTP - Read data from URL transferring in chunksCFHTTP - 从以块形式传输的 URL 读取数据
【发布时间】:2016-05-27 10:14:06
【问题描述】:

我正在尝试使用 cfhttp 从 URL 获取文件,但似乎提供者正在分块发送数据。

<cfhttp
    method="get"
    url="https://www.test.com/somefile.xml">
</cfhttp>

响应标头将Transfer-Encoding 作为分块 并且缺少Content-Length。 此外,statusCode 200 OkFileContent 显示“连接失败”。

有什么建议吗?

【问题讨论】:

  • 浏览网址会发生什么?
  • @DanBracuk 我可以读取文件的内容。
  • 我依稀记得几年前遇到过同样的问题。尝试添加以下请求标头:&lt;cfhttpparam type="Header" name="Accept-Encoding" value="deflate;q=0"&gt; &lt;cfhttpparam type="Header" name="TE" value="deflate;q=0"&gt;
  • @SamM 试过了。结果相同。 :(
  • @Beginner,我希望我能提供更多帮助。我记得分块响应的问题。但是该网站的开发人员非常友好地更改了响应以包含具有正确值(不是 0)的 Content-Length 标头,从而解决了问题。可能值得一试联系该网站的管理员。只要 Content-Length 是正确的值,是否将其分块应该是无关紧要的。

标签: java coldfusion chunked-encoding coldfusion-11 cfhttp


【解决方案1】:

最后,我使用java.net.URL 来完成这项工作:

<cfset local.objURL = createObject(
                          "java"
                        , "java.net.URL"
                      ).init( javaCast( "string" , "https://test.com/abc.xml" ) )>

<!--- Input Stream --->
<cfset local.inputStream = local.objURL.openStream()>

<!--- Get Content --->
<cfset local.objScanner = createObject(
                              "java"
                            , "java.util.Scanner"
                          ).init( local.inputStream ).useDelimiter( "\\A" )>
<cfset local.fileContent = local.objScanner.hasNext() ? local.objScanner.next() : "">

【讨论】:

  • 如何使用IOUtils.toString(myInputStream, "UTF-8"); ?。简单一点,好像是和CF11捆绑的。
  • @Leigh 哦,是的。谢谢(你的)信息。 :)
  • "Apache" 来救援 :-) 虽然扫描器技巧也很巧妙,但如果您无权访问 Apache 库。
【解决方案2】:

这可能是由于您的 CF 服务器上缺少用于 https 连接的证书(密钥库文件:cf11/jre/lib/security/cacerts)。

【讨论】:

    猜你喜欢
    • 2018-04-06
    • 2012-08-18
    • 2011-03-31
    • 2013-03-05
    • 2014-01-04
    • 2015-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多