2015-05-04 1 views
0

Я извлекаю токен доступа для карманного api. Я могу сделать это успешно, используя запрос Http POST с типом контента как application/x-www-form-urlencoded.Карманная аутентификация возвращает BadRequest с типом контента 'application/json'

{ 
    host: 'getpocket.com', 
    path: '/v3/oauth/authorize', 
    port: 443, 
    method: 'POST', 
    headers: 
    { 'Content-Type': 'application/x-www-form-urlencoded', 
    'Content-Length': 79 } 
} 

Но карман также поддерживает тип контента как application/json.

{ 
    host: 'getpocket.com', 
    path: '/v3/oauth/authorize', 
    port: 443, 
    method: 'POST', 
    headers: { 'Content-Type': 'application/json', 'Content-Length': 79 } 
} 

Но используя этот тип запроса возвращает мне

'400 Bad Request'

Я делаю это на nodejs. Должен ли я передавать какие-либо дополнительные сведения об этом, например «X-Accept» (не знаю, как это сделать).

ответ

1

Я думаю, что Pocket сообщает о плохом запросе, потому что вы отправляете форму закодированных данных, объявляя ее как JSON в заголовке Content-Type.

Если вы хотите отправить данные в карман в формате JSON, установите Content-Type: application/json; charset=UTF8.

Если вы хотите получить данные в формате JSON X-Accept: application/json.

Чтобы добавить пользовательские заголовки в HTTP-запросы, просто добавьте пару значений имени в req.headers перед отправкой. Например:

headers: { 'Content-Type': 'application/x-www-form-urlencoded', 'X-Accept' : 'application/json'} 

или:

req.headers['X-Accept'] = 'application/json' 

Посмотрите https://nodejs.org/api/http.html#http_http_request_options_callback.

+0

Возможно, вы отправляете данные в форме кодированных данных, объявляя их как JSON в заголовке Content-Type. Я сомневаюсь, что это так, потому что 'Content-Length' одинаково в обоих запросах, о которых вы говорили. Вам необходимо отправить данные JSON, чтобы они работали. –

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