2016-03-23 3 views
0

У меня возникли проблемы с использованием запросов Python. Вот мой код:Заголовки запросов Python не установлены должным образом

fields={ 
    "fields":{ 
     "field1":{"test": "test"}, 
     "field2": "test", 
     "field3":{"test": "test"} 
    } 
} 

try: 
    results = requests.post(
     "http://www.fakenotrealatall.com", 
     data=json.dumps(fields), 
     headers={"content-type": "application/json"} 
    ) 

    print results.headers['content-type'] 

    return stuff 

Когда я бегу, я получаю сообщение об ошибке 415, и оператор печати показывает, что тип содержимого является «текст/html; кодировка = UTF-8».

Почему он не задан как «application/json»?

+0

я использовал код, похожий на ваш, и он по-прежнему работает сегодня , Но моя реализация использует '' 'Content-Type': "application/json; encoding = 'utf-8'" ''. Попробуйте и посмотрите, не изменилось ли это. –

+0

Дал этот снимок, все еще не кубик ... – typedino

+0

Вы печатаете тип контента из ответа HTTP, а не тот, который указан в вашем заголовке в запросе. Таким образом, тип контента, который вы печатаете, будет таким, каким когда-либо был '' http: // www.fakenotrealatall.com'', который в этом случае является '' text/html; charset = utf-8''. –

ответ

1

У вас есть ошибка 415, потому что сервер на "http://www.fakenotrealatall.com" ответил на ошибку 415. Согласно the HTTP standard, что означает

Сервер отказывается обслуживать запрос, потому что объект запроса находится в формате, который не поддерживается запрашиваемым ресурсом для запрошенного метода.

Видимо, люди в www.fakenotrealatall.com не как JSON.

Значение results.headers['content-type'] является «text/html», потому что, опять же, это то, что сервер вернул. Помните, что это тип возвращаемых вами данных, не тип данных, которые вы отправили. Чтобы убедиться в этом, попробуйте:

print results.headers['content-type'] 
print results.request.headers['content-type'] 

Обратите внимание, как запрос имеет тип JSON, но ответ в HTML.

Наконец, чтобы увидеть, как это все должно работать, попробуйте отправить на сайт, который будет принимать JSON, как http://httpbin.org:

import requests 
import json 

fields={ 
    "fields":{ 
     "field1":{"test": "test"}, 
     "field2": "test", 
     "field3":{"test": "test"} 
    } 
} 

results = requests.post(
     "http://httpbin.org/post", 
     data=json.dumps(fields), 
     headers={"content-type": "application/json"} 
    ) 

print results.status_code, results.reason 
print results.headers['content-type'] 
print results.request.headers['content-type'] 
Смежные вопросы