【发布时间】:2020-09-19 03:48:32
【问题描述】:
我正在尝试使用 Excel VBA 进行一些抓取,特别是从服务器获取 JSON。 我使用 exactly 与浏览器开发工具上显示的请求标头相同,但是当我从 Excel 执行此请求时,我总是得到 406(“不接受”)来自服务器的回答。 我错过了什么?
Sub getJSON()
Dim XHR As New MSXML2.ServerXMLHTTP60
XHR.Open "GET", "https://www.magazineluiza.com.br/produto/calculo-frete/08226021/615254900/frigelar.json", False
XHR.setRequestHeader "Host", "www.magazineluiza.com.br"
XHR.setRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 6.3; Win64; x64; rv:76.0) Gecko/20100101 Firefox/76.0"
XHR.setRequestHeader "Accept", "application/json, text/javascript, */*; q=0.01"
XHR.setRequestHeader "Accept-Language", "pt-BR,pt;q=0.8,en-US;q=0.5,en;q=0.3"
XHR.setRequestHeader "Accept-Encoding", "gzip, deflate, br"
XHR.setRequestHeader "X-Requested-With", "XMLHttpRequest"
XHR.setRequestHeader "Connection", "keep-alive"
XHR.setRequestHeader "Referer", "https://www.magazineluiza.com.br/refrigerador-expositor-para-bebidas-metalfrio-com-controlador-eletronico-497-litros-vb52r-220v/p/6152549/pi/expb/"
XHR.setRequestHeader "TE", "Trailers"
XHR.send
Debug.Print XHR.responseText
End Sub
这是我在浏览器上得到的答案:
{"address":{"address":"18 DE ABRIL","area":"CIDADE ANTONIO ESTEVAO DE CARVALHO","city":"SAO PAULO","state":"SP","zip_code":"08226021"},"delivery":[{"description":"Entrega padrão","distribution_center":0,"is_deadline":true,"price":"263.91","time":13,"zip_code_restriction":false}],"is_delivery_unavailable":false,"zip_code":"08226021"}
编辑:当我在this page 右侧添加邮政编码“08226021”并单击“确定”时,浏览器会检索到此 JSON。
【问题讨论】:
-
如何使用开发工具访问文件?我在尝试打开页面时遇到 406 错误
-
@NickSlash 你是对的,当你试图通过浏览器上的 url 直接打开这个 JSON 时,会得到 406。但是如果你去 Firefox 开发工具,网络选项卡,选择请求,单击“编辑并重新发送”并将显示的标题放在问题上(与网页检索 JSON 时使用的标题相同),它可以工作。我用正确的标题检索此 JSON 的网站链接编辑了问题
标签: excel vba web-scraping https xmlhttprequest