我正在通过Delphi XE3中的TWebBrowser访问Google Maps API。
最初,通过Navigate2将TWebBrowser加载到“about:blank”。然后,在代码中动态生成要呈现的超文本标记语言,并通过流将其加载到TWebBrowser中。
这一切都很好,只要我使用免费的地图API。要使用Maps for Business,对API的请求必须来自预注册的URL,Google根据GET请求中的referer标头确定,GET请求通常是“浏览器”在加载Javascript时发送的。即使我在初始Navigate2调用中指定了referer标头,但当加载并呈现生成的HTML,并且TWebBrowser发送了对API Javascript的GET请求时,该请求不包含referer标头,因此该请求被拒绝。我确认没有使用Fiddler发送referer报头。
看起来TWebBrowser只在实际导航到网址时发送referer头,而不是在发送GET请求时发送,就像从脚本元素加载API一样。
我不能使用Navigate2加载“网页”,因为没有服务器可以加载它。
有没有办法强制TWebBrowser在发出GET时包含一个特定的referer头,当它呈现的超文本标记语言从流中加载时?经过几个小时的搜索,我没有找到任何可以做到这一点的线索。
发布于 2014-04-11 05:37:59
在将HTML动态加载到TWebBrowser
之前,请修改HTML以将<base href="...">
标记插入到HTML的<head>
中,以指示该HTML最初的来源。然后,该URL用于解析相对URL、建立Referer等。
https://stackoverflow.com/questions/22998013
复制相似问题