尝试使用数据进行POST时,Python请求获取TypeError

时间:2019-03-09 02:52:02

标签: python python-3.x post python-requests

我正在尝试在页面上进行表单登录,但不断出现以下类型错误。我已经阅读了Python Requests package文档,当我打印数据字典时,它看起来像一个有效的例子。我不确定发生了什么问题。这是我的Traceback代码:

import requests

accept = 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8'
acceptlang = "en-US,en;q=0.9"
url = 'https://httpbin.org/post'
userid = 'username'
passwd = 'password'

headers = {
        'Accept': accept,
        'Accept-Language': acceptlang,
    }

data = {userid: fakeuserid, passwd: fakepasswd}

>>> print(data)
{'username': 'fakeuser@example.com', 'password': '0#CCJyy3^5Tu(Z'}
>>> response = requests.post(url, headers, data=data)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: post() got multiple values for argument 'data'

当我仅发布(url,标头)或(url,data = data)进行发布时,发布成功。我不确定这是怎么回事。

2 个答案:

答案 0 :(得分:1)

根据requests API,看来您似乎需要headers参数的关键字,否则, post()假定它是data。试试这个:

response = requests.post(url, headers=headers, data=data)

答案 1 :(得分:0)

某些API服务器仅接受JSON编码的POST / PATCH数据,请执行以下操作:

response = requests.post(url, json=data, headers=headers)

与以下内容相同:

import json
response = requests.post(url, json.dumps(data), headers=headers)

更多信息,请访问:docs.python-requests.org/en/master/user/quickstart/#more-complicated-post-requests