2015-11-05 5 views
1

Я пытаюсь преобразовать следующую команду cURL в запрос в Python.Запросы с заголовками и данными

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

+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 и нажимает кнопку отправки. Это вызовет завихрение передачи данных на сервер с использованием приложения типа контента/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 Bad Request. Однако! Когда я помещал данные в словарь, он работал, так что спасибо! – enjoi

+0

@JavaNoob: тогда это будет заголовок «Content-Type». Вы можете сделать свою оригинальную версию, установив заголовок 'Content-Type' в' application/x-www-form-urlencoded'. –

Смежные вопросы