如何模拟这个表单post信息?

发布于 2022-09-06 02:40:07 字数 795 浏览 13 评论 0

目标页面
https://www.alphavantage.co/s...

我的模拟代码

import urllib.request
import urllib.parse 
url = 'https://www.alphavantage.co/support/#api-key'
values = {'first':'xx','last': 'voidking','occupation': 'investor','email':'xyz@qq.com'}
data = urllib.parse.urlencode(values).encode(encoding='utf-8',errors='ignore')
headers = { 'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:50.0) Gecko/20100101 Firefox/50.0' }
request = urllib.request.Request(url=url, data=data,headers=headers,method='POST')
x=urllib.request.urlopen(request)

raise HTTPError(req.full_url, code, msg, hdrs, fp)
urllib.error.HTTPError: HTTP Error 403: Forbidden

请问,如何成功模拟post表单数据,并获得返回的响应呢?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

避讳 2022-09-13 02:40:08

大概有几种情况

  1. 需要登陆
  2. 没有使用API的权限,需要使用Token
过气美图社 2022-09-13 02:40:08

被403拒了,肯定是缺少某个关键参数/header。一般网站可能还有host、referer等header校验,django默认会有csrf校验。
你先用web页面提交,看一下传了些什么参数,有哪些请求header。
看了下你这个网站,正好就是有csrf校验,所以,你得想办法先拿到csrfmiddlewaretoken

娇妻 2022-09-13 02:40:08

关键提交的headers必须要有Referer和X-CSRFToken


import requests

url = 'https://www.alphavantage.co/support/#api-key'

session = requests.Session()
r = session.get(url)

session.headers.update({
    'Referer': url,
    'X-CSRFToken': r.cookies['csrftoken'],
})

data = {
    'first_text': '111',
    'last_text': '222',
    'occupation_text': 'Investor',
    'email_text': '333@qq.com'
}

r = session.post(url, data=data)
print r.status_code
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文