python
  • curl
  • python-requests
  • 2015-11-05 55 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'來使原始版本工作。 –

    相關問題