带标题和数据的请求

enj*_*joi 2 python curl python-requests

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

curl -H 'customheader: value' -H 'customheader2: value' --data "Username=user&UserPassword=pass" https://thisismyurl
Run Code Online (Sandbox Code Playgroud)

据我所知,可以获取头文件和POST数据.那么我怎么做这两个像cURL?

这就是我正在尝试的:

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

requests.get(url, headers=headers, data=data)
Run Code Online (Sandbox Code Playgroud)

哪个回报: HTTPError: HTTP 405: Method Not Allowed

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

Mar*_*ers 7

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

requests.post(url, headers=headers, data=data)
Run Code Online (Sandbox Code Playgroud)

curl手册:

-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)
Run Code Online (Sandbox Code Playgroud)