【发布时间】:2021-06-14 10:08:37
【问题描述】:
我正在尝试访问 https://www.nseindia.com/ 以获取响应标头中的 cookie。 但是使用 MSXML2.XMLHTTP 会将 cookie 值返回为空字符串。
来自VBA Microsoft.XMLHTTP setRequestHeader not sending cookie - 我尝试使用 WinHTTP,它根本没有连接并且一直超时。显然,这只能用于 HTTP 请求。如何对 HTTPS 请求进行同样的处理?
MSXML2.ServerXMLHTTP 似乎也不支持 HTTPS 请求。
请找到我用于以下两种方法的代码 sn-ps:
MSXML2.XMLHTTP
Sub Get_Web_Data()
Dim request As Object
Dim response As String
Dim website As String
' Website to go to.
website = "https://www.nseindia.com/"
' Create the object that will make the webpage request.
Set request = CreateObject("MSXML2.XMLHTTP")
' Where to go and how to go there.
request.Open "GET", website, False
' Set headers.
request.setRequestHeader "If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT"
request.setRequestHeader "user-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.82 Safari/537.36"
request.setRequestHeader "accept-Encoding", "gzip , deflate"
request.setRequestHeader "accept-language", "en-US,en;q=0.9"
request.setRequestHeader "Accept", "text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5"
request.setRequestHeader "Accept-Charset", "ISO-8859-1,utf-8;q=0.7,*;q=0.7"
' Send the request for the webpage.
request.send
responseHeaders = request.getAllResponseHeaders
MsgBox responseHeaders
End Sub
winHTTP
Sub Get_Web_Data_Cookie()
Dim website As String
Dim cookieString As String
Dim XMLHTTP As WinHttp.WinHttpRequest
' Website to go to.
website = "https://www.nseindia.com/"
'Initialize XMLHttp Object
Set XMLHTTP = CreateObject("WinHttp.WinHttpRequest.5.1") ' needs Microsoft WinHTTP Services 5.1 reference
' XMLHTTP.Option(WinHttpRequestOption_EnableRedirects) = False ' WinHttpRequestOption_EnableRedirects=6
XMLHTTP.Open "GET", website, False
' Set headers.
XMLHTTP.setRequestHeader "user-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.82 Safari/537.36"
XMLHTTP.setRequestHeader "accept-encoding", "gzip , deflate"
XMLHTTP.setRequestHeader "accept-language", "en-US,en;q=0.9"
' Send the request for the webpage.
XMLHTTP.send
responseHeaders = XMLHTTP.getAllResponseHeaders
MsgBox responseHeaders
End Sub
【问题讨论】:
-
也许这个网站试图阻止网络抓取...您可以为
user-agent使用任何其他选项吗?