excel - 对公共(public) Google 表单的请求返回 Access Denied : HTTP

标签 excel vba google-forms

我正在尝试使用 MS Excel 来自动填写 Google 表单,但是我在访问时遇到了问题,以前可以使用相同的代码并且我没有进行任何更改。这是代码:

Sub postGoogleData()
Dim params As String, url As String

url = "https://docs.google.com/forms/u/0/d/e/1FAIpQLSejadFloQF5V69ZZ1fc1kManOZ_vMw8kq10-56ENroZ4c6xiw/formResponse"
params = "entry.1880992192=<NAME>&entry.2125520249=<IG>&entry.1421191722=<E>&entry.1858469755=Option+1&entry.1858469755=Option+2&dlut=1632409237551&entry.1858469755_sentinel=&fvv=1&draftResponse=%5Bnull%2Cnull%2C%22-829268773860757612%22%5D&pageHistory=0&fbzx=-829268773860757612"

params = Replace(params, "<NAME>", Range("A1").Value)
params = Replace(params, "<IG>", Range("A2").Value)
params = Replace(params, "<E>", Range("A3").Value)
  
' add a reference to Microsoft XML 6.0 (tools...reference...microsoft XML v6.0_

Dim http As New MSXML2.XMLHTTP60

http.Open "POST", url, False
http.setRequestHeader "content-type", "application/x-www-form-urlencoded"
http.send params

End Sub
我收到了错误 Access Denied .我更改了 Internet Explorer 选项:Internet 选项安全 > 自定义安全级别 > 其他 > 跨域访问数据源 > 启用。这消除了错误,但没有填充我的 Google 表单。
我试过MSXML2.ServerXMLHTTP60但这也没有填充 Google 表单。
这里是 spreadsheet其中包含所有响应的摘要。这里是 Google Form .我的目标是使用 Excel 自动填写 Google 表单。此代码以前可以工作,但我遇到了 Access Denied以前可以工作的文件中的错误。难道是因为谷歌必须在他们的网络服务中实现的改变?
我感谢您的帮助。谢谢你。

最佳答案

似乎 Google 会阻止没有 User-Agent 的请求所以你需要添加类似的东西

http.setRequestHeader "User-Agent", "my generic vba script"
在发送参数之前。或者你伪造任何现有的用户代理,比如
http.setRequestHeader "User-Agent", "Mozilla/5.0 (iPad; U; CPU OS 3_2_1 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Mobile/7B405"
添加该行后,答案将出现在电子表格中:
enter image description here

像这样使用它
http.Open "POST", url, False
http.setRequestHeader "User-Agent", "my generic vba script"
http.setRequestHeader "content-type", "application/x-www-form-urlencoded"
http.send params
正如您在下面的屏幕录像中看到的那样,它可以工作。我刚刚复制了您的代码,添加了对 Microsoft XML 6.0 的引用,添加了用户代理行并运行它。
enter image description here

关于excel - 对公共(public) Google 表单的请求返回 Access Denied : HTTP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69309656/

相关文章:

node.js - 似乎无法通过 NodeJS 提交到 Google 表单

excel - 如何指定与 find/with 一起使用的工作表

excel - 使用 SumProduct 的加权 AverageIFs 语句

VBA 执行该行代码,然后提示该行超出范围

html - VBA:从HTML表格中的TD的innerhtml中提取href的有效方法

javascript - iFrame 更改 iFrame 中的 css 类

google-apps-script - 根据 Google 表格电子表格中的动态数据更新 Google 表单字段

excel - 从 Outlook 到 Excel 的 VBA 导出的日期格式更改

c# - Excel 工作簿 - 从 C# 读取速度非常慢?

excel - IsNull、IsEmpty、=Empty 和空字符串(即 "")有什么不同,为什么我可以使用变体