python
  • curl
  • python-requests
  • 2015-11-05 54 views 1 likes 
    1

    我试图将下面的cURL命令转换为Python中的请求。带有标题和数据的请求

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

    据我所知,可以获取标题和POST数据。那么我怎样才能像卷曲一样呢?

    这就是我想:

    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

    +0

    您的意思是GET与身体?是的,可能的。是的,很奇怪。比照http://stackoverflow.com/questions/978061/http-get-with-request-body –

    回答

    5

    当您使用--data命令行参数,curl切换到POST请求。做同样在Python:

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

    curl manual

    -d--data <data>
    (HTTP)发送指定的数据在POST请求中向HTTP服务器,以同样的方式,一个浏览器在用户填写HTML表单并按下提交按钮时会执行此操作。 HTTP服务器,就像浏览器在用户填写HTML表单并按下提交按钮时所做的一样。这将导致curl使用内容类型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) 
    
    +0

    此外,[这里](http://docs.python-requests.org/en/latest/)是请求的文档:) –

    +0

    正如我在使用request.post时在我的问题中提到的(很差),我收到400错误请求错误。然而!当我将数据放入字典中时,它很有用,所以谢谢! – enjoi

    +0

    @JavaNoob:那将是Content-Type头。您可以通过将'Content-Type'头部设置为'application/x-www-form-urlencoded'来使原始版本工作。 –

    相关问题