它可能看起来像其他代码示例一样有效,但这可能意味着它尚未运行。
两个库函数Web.Contents('url')
and Web.Page(Web.Contents('url'))
使用不同的 HTTP 客户端。
Web.Contents
使用一个非常基本的 HTTP 客户端,但是Web.Page
在未变换的Web.Contents
将改为使用 IE 浏览器直接加载 URL。 IE 对于任何 HTTP 协议错误都非常宽容,但基本的 HTTP 客户端要严格得多,这会导致您看到的错误。
通过致电Binary.Buffer
or Text.Replace
在“之间”,这将跳过优化Web.Page
直接使用浏览器,它改为使用Web.Contents
发出 Web 请求,然后将这些字节加载到浏览器中。
因此,在这种情况下,如果您调用:
Web.Page(Web.Contents("http://vote.sos.ca.gov/returns/president/party/democratic/county/all"))
您将得到一个好的结果表,但“来自网络”将被破坏,因为Web.Contents('url')
本身就会出错。
由于您分享了网址,我可以尝试http://vote.sos.ca.gov/returns/president/party/democratic/county/all http://vote.sos.ca.gov/returns/president/party/democratic/county/all并遇到同样的问题。
根本问题是 HTTP 响应标头中的第四个 cookie 在中间有一个无效的十六进制字符 0x01:
也许这就是http://vote.sos.ca.gov/ http://vote.sos.ca.gov/可以修复他们的服务器吗?我尝试在他们的“联系我们”页面上提交“错误报告”,但我不确定这是正确的渠道......
顺便说一句,我们的 HTTP 客户端库没有给出很好的错误消息,CR 或 LF 字符没有任何问题。即使有,也没有什么Text.Replace
在这种情况下,通过响应正文可以修复,因为问题出在 HTTP 响应标头中。