gpt4 book ai didi

java - ColdFusion - 缺少第一个字符的 HTTP block

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:39:43 24 4
gpt4 key购买 nike

这个问题是我的 previous question 的延续关于 ColdFusion 中的 HTTP block 传输。现在,我已经使用了java.net.URL阅读 block ,这就是我尝试过的:

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

<!--- Open Connection --->
<cfset local.objConnection = local.objURL.openConnection()>

<!--- Input Stream --->
<cfset local.inputStream = local.objConnection.getInputStream()>

<!--- Read Chunks --->
<cfloop condition="true">
<!--- Get Chunk Length --->
<cfset local.chunkLength = local.inputStream.read()>
<cfif local.chunkLength LT 0>
<cfbreak>
</cfif>

<!--- Byte Array --->
<cfset local.chunk = getByteArray(local.chunkLength)>
<cfset local.offset = 0>

<!--- Read Chunk Data --->
<cfloop condition="local.offset LT local.chunkLength">
<cfset local.bytesRead = local.inputStream.read(local.chunk, local.offset, local.chunkLength - local.offset)>
<cfif local.bytesRead LT 0>
<cfbreak>
</cfif>
<cfset local.offset += local.bytesRead>
</cfloop>
<!--- Chunk --->
<cfdump var="#charsetEncode( local.chunk, 'utf-8' )#"><br />
</cfloop>

使用上面的代码,我能够读取数据,但我面临的问题是每个 block 中的第一个字符都丢失了,即

First Chunk is: <?xml version="1.0" encoding="utf-8" ?> <root> but I am only getting ?xml version="1.0" encoding="utf-8" ?> <root>

有什么建议吗?

最佳答案

我认为这部分不正确:

<!--- Get Chunk Length --->
<cfset local.chunkLength = local.inputStream.read()>
<cfif local.chunkLength LT 0>
<cfbreak>
</cfif>

您希望 block 长度位于流的开头。为什么?这是你自己的协议(protocol)吗?如果你在谈论 http 分块,你应该检查 http 响应头是否为 Transfer-Encoding甚至有值 chunked .否则,假设内容被分块是完全错误的。还有,你only read one byte .这意味着 block 长度最多可以为 255 字节,这不是很灵活。 HTTP block 可以比这更长,并且 block 大小由所有数字组成,直到换行符,例如 1234\r\n .

我强烈怀疑 read()以上总是消耗你的<并返回 60 的 chunkLength,这是 < 的 ascii 值.

关于java - ColdFusion - 缺少第一个字符的 HTTP block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35451665/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com