带标题和数据的请求

时间:2015-11-05 01:38:29

标签: python curl python-requests

我正在尝试将以下cURL命令转换为Python中的Request。

curl -H 'customheader: value' -H 'customheader2: value' --data "Username=user&UserPassword=pass" https://thisismyurl

根据我的理解,可以获取标头和POST数据。那么我怎么做这两个像cURL?

这就是我正在尝试的:

url = 'myurl'
headers = {'customheader': 'value', 'customheader2': 'value'}
data = 'Username=user&UserPassword=pass'

requests.get(url, headers=headers, data=data)

返回:HTTPError: HTTP 405: Method Not Allowed

如果我使用帖子:MissingArgumentError: HTTP 400: Bad Request

1 个答案:

答案 0 :(得分:7)

使用--data命令行参数时,curl会切换到POST请求。在Python中做同样的事情:

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

来自curl manual

  

-d--data <data>
  (HTTP)将POST请求中的指定数据发送到HTTP服务器,就像用户填写HTML表单并按下提交按钮时浏览器一样。 HTTP服务器,与用户填写HTML表单并按下提交按钮时浏览器的操作方式相同。这将导致curl使用content-type application / x-www-form-urlencoded将数据传递到服务器。

您可能需要相应地手动设置Content-Type标头,使用data参数的字典(并且requests对这些参数进行编码格式;您也可以设置Content-Type标题:

url = 'myurl'
headers = {'customheader': 'value', 'customheader2': 'value'}
data = {'Username': 'user', 'UserPassword': 'pass'}

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