Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用Python向google表单发送POST请求_Python_Post_Python Requests_Google Forms - Fatal编程技术网

用Python向google表单发送POST请求

用Python向google表单发送POST请求,python,post,python-requests,google-forms,Python,Post,Python Requests,Google Forms,所以我创建了一个谷歌表单,下面是链接: 我想用Python中的Python来回答这个问题,我试过了,但是它返回了400个错误的请求 这是我的代码: import requests def f(): url = 'https://docs.google.com/forms/d/e/1FAIpQLSedKV-pzCYZjnp-tAm6Ww9HMoosYPucSL2y9usEIz6yBizbFg/formResponse' form_data = {"entry.386860893":"Py

所以我创建了一个谷歌表单,下面是链接:

我想用Python中的Python来回答这个问题,我试过了,但是它返回了400个错误的请求

这是我的代码:


import requests
def f():
  url = 'https://docs.google.com/forms/d/e/1FAIpQLSedKV-pzCYZjnp-tAm6Ww9HMoosYPucSL2y9usEIz6yBizbFg/formResponse'
  form_data = {"entry.386860893":"Python","fvv":1,"draftResponse":'[]',"pageHistory":0,"fbzx":-6718008993703688486}
  user_agent = {'Refer':'https://docs.google.com/forms/d/e/1FAIpQLSeI3-jkg0oedRXECibaxbGZiFyOHGYjvNiOXcADBK9Qq__gUg/viewform?fbzx=-6860115379139697000','User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36'}
  r = requests.post(url, data=form_data, headers=user_agent)
  print(r)

谢谢

更新: 我错了。该错误不是由会话数据丢失或无效引起的。下面的代码示例(会话的使用)不是必需的!我刚刚将您的代码示例中的URL更改为您问题中的链接,这对我很有用:

import requests
url = 'https://docs.google.com/forms/d/e/1FAIpQLSeI3-jkg0oedRXECibaxbGZiFyOHGYjvNiOXcADBK9Qq__gUg/formResponse'
form_data = {"entry.386860893":"Python","fvv":1,"draftResponse":'[]',"pageHistory":0,"fbzx":-6718008993703688486}
requests.post(url, data=form_data)  # response [200]
原始答复: 可能你需要先拿个代币什么的。对于与网站的交互通信,我建议使用
requests.Session()
来处理与网页的交互。 如果我使用您代码示例中的链接,我也会收到错误的请求错误,但是使用您问题中的链接,这是有效的:

url1 = 'https://docs.google.com/forms/d/e/1FAIpQLSeI3-jkg0oedRXECibaxbGZiFyOHGYjvNiOXcADBK9Qq__gUg/viewform'
url2 = 'https://docs.google.com/forms/d/e/1FAIpQLSeI3-jkg0oedRXECibaxbGZiFyOHGYjvNiOXcADBK9Qq__gUg/formResponse'
form_data = {"entry.386860893":"Python","fvv":1,"draftResponse":'[]',"pageHistory":0,"fbzx":-6718008993703688486}

s = requests.Session()
s.get(url)
r = s.post(url2, data=form_data)
print(r)

有点晚了,但我发现您得到400响应错误的一个可能原因是,当使用
requests
模块时,发布的数据会自动进行url编码。因此,包含“+”和“@”等字符的发布选项将导致错误的表单错误(google表单将空格替换为+)

因此,解决此问题的一种方法是,通过传递字符串,让请求发布http URL

url = "https://docs.google.com/forms/xxx/formResponse"
string = "entry.xxx=Option+1&entry.xxx=option2"
r = requests.post(url, params = string)

希望这能有所帮助。

我刚刚通过禁用“回复收据”选项解决了这个问题

非常感谢!它确实有用!但是为什么我不需要发送标题呢?因为我已经看到了其他的StackOverflow,它们确实包含了一个标题。好奇地想知道:P再次感谢!当然,您也可以发送标题,只是想给出一个简单的工作示例。