2017-02-06 4 views
0

Я новичок в http-запросах и пытаюсь автоматизировать некоторые работы. Но я не могу получить требуемый результат. Я просмотрел много сообщений и документации модуля запросов python, но результат не изменился.Модуль запроса Python дает ошибку 400 (неверный запрос) для POST

Код я написал

def installFont(): 
    print "Installing font" 
    urlToHit = "some http address" 
    header_ = { "UserID": "00000", "PortalName": "EDC", "ModifyBy" : "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", "Content-Type" : "application/json"} 

    body_ = { 
    "Email": "[email protected]", 
    "AssetLicenseType": "Trial", 
    "MachineIds": ["machine1", "machine2"], 
    "fontAsset": 
    [ 
    { 
      "FontId": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", 
      "FontName": "Neue Aachen™ Pro Ultra Light", 
      "FontUrl": "http://helveticaurl", 
      "FontDownloadUrlAPI": "url", 
      "FontDownloadUrl" : "url1, 
      "FontFamilyName": "Neue Aachen™ Pro", 
      "FontFamilyUrl": "http://FontFamilyUrl", 
      "FontStyle": "Normal", 
      "FontWeight": "100", 
      "ExpiryDate": "2017-2-27 11:17:01", 
      "FontFamilyId": "34" 
    }     
    ] 
} 

r = requests.request("POST", urlToHit, data=body_, headers=header_) 
print r.headers 
print r.status_code 
print r.text 

Itried То же самое с почтальоном, который дает мне правильный результат, но с помощью питона я получаю выход в

 
{'X-Processing-Time-Milliseconds': '3', 'Transfer-Encoding': 'chunked', 'X-Powered-By': 'ASP.NET', 'Server': 'Kestrel', 'Date': 'Mon, 06 Feb 2017 14:51:59 GMT', 'Content-Type': 'application/json'} 
400 
{"Message":"''"} 

Я думаю, что я делаю какую-то ошибку при прохождении body_ в

r = requests.request("POST", urlToHit, data=body_, headers=header_)

Выход через Почтальон {"Message":"Created Successfully","SuccessCount":2,"FailCount":0}

+0

Я изучил его, и я предполагаю, что проблема связана с ** fontAssest ** полем. Когда я удаляю это поле из «body_», ответ будет _ {«Сообщение»: «« По крайней мере, один ресурс шрифта требуется »»} _. Но body_ отлично работает с инструментом POSTMAN. Итак ** fontAsset ** - это список словарей. Возможно, мне нужно сфокусироваться на том, как мне нужно передать такой запрос для публикации. –

+0

Пожалуйста, не стесняйтесь на этот вопрос. Существует особый характер ** ™ **, о котором нужно позаботиться. Теперь я могу получить требуемый результат. –

ответ

0

Вы должны использовать:

r = requests.post(urlToHit, json=body_, headers=headers_) 

Перейди через documentation.

+0

Я уже проверил 'r = request.post (urlToHit, data = body_, headers = headers_)'. 'request.post (urlToHit, data = body_, headers = headers_)' calls 'request.request ("POST", urlToHit, data = body_, headers = header_)'. –

+0

Также я проверил преобразование body_ в строку '" "" значение body _ "" "'. Как написано в defination data = **: param data: (необязательно) Словарь, байты или файловый объект для отправки в тело класса: 'Request'. ** –

+0

Также я пробовал r = запросы .post (urlToHit, json = body_, headers = headers_), видя документацию, но результат не изменяется. –

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

  • Нет связанных вопросов^_^