来自VBA的XMLHttpRequest返回错误406“未接受”

问题描述 投票:0回答:1

我正在尝试使用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。    
excel vba web-scraping https xmlhttprequest
1个回答
1
投票
尝试此操作以获得所需的响应:

Sub FetchJsonResponse() Const Url$ = "https://www.magazineluiza.com.br/produto/calculo-frete/08226021/615254900/frigelar.json" With CreateObject("WinHttp.WinHttpRequest.5.1") .Open "GET", Url, False .setRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 6.1; ) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36" .setRequestHeader "Referer", "https://www.magazineluiza.com.br/refrigerador-expositor-para-bebidas-metalfrio-com-controlador-eletronico-497-litros-vb52r-220v/p/6152549/pi/expb/" .setRequestHeader "x-requested-with", "XMLHttpRequest" .send Debug.Print .responseText End With 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\u00e3o", "distribution_center": 0, "is_deadline": true, "price": "263.91", "time": 13, "zip_code_restriction": false}], "is_delivery_unavailable": false, "zip_code": "08226021"}

© www.soinside.com 2019 - 2024. All rights reserved.