vba WinHTTPRequest 返回空响应文本和正文

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/24975513/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-12 03:59:25  来源:igfitidea点击:

WinHTTPRequest Returning Empty Response Text and Body

excelvbawinhttprequest

提问by Osprey2k

I'm having trouble getting response text anda response body returned when I run the code below. The "HTTP/1.1 200 OK" message comes back along with response headers, but no response body. I've confirmed this result using Fiddler2 and also looking a netsh trace log.

当我运行下面的代码时,我无法获取响应文本返回的响应正文。“HTTP/1.1 200 OK”消息与响应标头一起返回,但没有响应正文。我已经使用 Fiddler2 确认了这个结果,并且还查看了 netsh 跟踪日志。

Other URLs (http://real-chart.finance.yahoo.com/table.csv?s=CELG&d=6&e=26&f=2014&g=d&a=2&b=26&c=1990&ignore=.csv) for example, do return response text as well as a response body.

其他 URL ( http://real-chart.finance.yahoo.com/table.csv?s=CELG&d=6&e=26&f=2014&g=d&a=2&b=26&c=1990&ignore=.csv) 例如,返回响应文本为以及响应机构。

Why is there a problem with this URL and how can I get it to return a response body?

为什么这个 URL 有问题,我怎样才能让它返回响应正文?

Sub testlogin()

    fileUrl = "http://financials.morningstar.com/ajax/ReportProcess4CSV.html?t=XNYS:HFC&region=USA&culture=en-US&productCode=COM&reportType=is&period=&dataType=A&order=desc&columnYear=5&rounding=3&view=raw"

    Set WHTTP = CreateObject("WinHTTP.WinHTTPrequest.5.1")

    WHTTP.Open "GET", fileUrl, False

    WHTTP.Send

    MsgBox WHTTP.Status
    MsgBox WHTTP.ResponseText
    MsgBox WHTTP.ResponseBody
    MsgBox WHTTP.GetAllResponseHeaders

    Set WHTTP = Nothing

End Sub

采纳答案by djikay

Have you studied those response headers that are returned by the GETcalls to both URLs?

您是否研究过GET对两个 URL的调用返回的响应标头?

Morningstaris like this:

晨星是这样的:

Cache-Control: max-age=0
Connection: keep-alive
Date: Sat, 26 Jul 2014 22:07:33 GMT
Pragma: no-cache
Content-Length: 0
===>> Content-Type: text/html;charset=UTF-8 <<===
===>> Content-Encoding: gzip <<===
Server: Apache
Set-Cookie: JSESSIONID=6FAF41A612ABB32B0C670AB07BF0D8A5; HttpOnly
Vary: User-Agent
Vary: Accept-Encoding
com.coradiant.appvis: vid=ad&sid=CONTROLLER_1&tid=da615c36-2a18-4129-bcd7-1cbb139ab52b
Content-Disposition: attachment;filename=""HFC Income Statement.csv""
ExpiresDefault: access plus 2 hours

Yahoo Financeis like this:

雅虎财经是这样的:

Cache-Control: private
Connection: close
Date: Sat, 26 Jul 2014 22:10:00 GMT
Transfer-Encoding: chunked
===>> Content-Type: text/csv <<===
P3P: policyref=""http://info.yahoo.com/w3c/p3p.xml"", CP=""CAO DSP COR CUR ADM DEV TAI PSA PSD IVAi IVDi CONi TELo OTPi OUR DELi SAMi OTRi UNRi PUBi IND PHY ONL UNI PUR FIN COM NAV INT DEM CNT STA POL HEA PRE LOC GOV""
Set-Cookie: B=d3svnbl9t89po&b=3&s=4i; expires=Tue, 26-Jul-2016 22:10:00 GMT; path=/; domain=.yahoo.com
Vary: Accept-Encoding

I've sort-of highlighted the Content-Typeand Content-Encodingheaders (where available).

我在某种程度上突出了Content-TypeContent-Encoding标题(如果可用)。

Basically, the content returned is different for the two calls. Clearly, Excel can interpret the second case where the content type is "text/csv" but the first one is a strange gzipped html page that I guess Excel can't understand.

基本上,两次调用返回的内容是不同的。显然,Excel 可以解释内容类型为“text/csv”的第二种情况,但第一种情况是一个奇怪的 gzipped html 页面,我猜 Excel 无法理解。

I can't possibly give you a solution to this issue, but the content of the headers could certainly explain the difference in behaviour you're seeing.

我无法为您提供解决此问题的方法,但是标题的内容肯定可以解释您所看到的行为差异。