2016-11-14 4 views
1

Я использовал фреймворк Frisby для написания тестовых примеров API. когда я ставлю URL и удостоверение в почтальон или DHC, ответы правильно идут, но в Фрисби тестового я получаю сообщение об ошибке: -Я получаю ошибку «Ожидаемый 400 до 200»

кода находится ниже: -

var frisby = require('frisby'); 
frisby.create('User Authentication') 

//send the params to below url 
    .post("url", 
     { username: "username", 
     password: "password" 
     }, 
     { json: true, 
     headers: {Accept:'application/json', 
       'Accept-Encoding':'Encoding:gzip, deflate', 
       'Accept-Language':'en-US,en;q=0.8', 
       Connection:'keep-alive', 
       'Content-Length':'107', 
       'Content-Type':'application/json', 
       Host:'url.com', 
       Origin:'http://url.com', 
       Referer:'http://url.com/', 
       'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36', 
       'X-Application-Key':'1234545', 
       'X-Requested-With':'XMLHttpRequest' 
       } 
     } 
    ) 

.expectStatus(200) 
.toss(); 
+0

Имя пользователя, пароль и URL-адрес являются пустыми. –

+0

Любое предложение Пожалуйста, –

+0

HTTP 400 является «плохим запросом», поэтому, возможно, что-то не так с вашими заголовками запросов. «Accept-Encoding»: «Кодирование: gzip, deflate» выглядит странно; Я бы удалил эту вторую «Кодировку:», если бы я был вами. –

ответ

0

Запрос приходит назад как 400, который является HTTP Bad Request.

Первое, что я сделал бы, чтобы вывести тело сообщения ответа API, отправленное вам обратно, чтобы увидеть какие-либо детали того, что не так. Ответы с плохим запросом, как правило, говорят вам, что не так с запросом.

Поскольку frisby является асинхронным, вы обеспечиваете выполнение заказа с помощью after() (перед тем как бросить).

.post("https://blah.blah.blah.com", "some json...", "some more json...") 
.expectStatus(200) 
.after(function(err, res, body){ console.log(body); }) 
.toss(); 

Теперь, Фрисби-х post() принимает 3 аргумента:

  • url: URL
  • data: тело вашего запроса после
  • params: параметры для Фрисби пост функции пост, как говорил он должен представить json.

Итак, похоже, вы публикуете (возможно, создаете) объект имени пользователя/пароля.

Я предполагаю, что строка "url" действительно является действительным URL-адресом, поэтому мы можем пропустить эту очевидную проблему.

Принимая дикий снимок, не видя сообщения об ошибке, я собираюсь угадать вашу проблему: вы не предоставляете аутентификационные данные API. Я не знаю, многие API полностью открыты. Как правило, вы ожидаете, что-то вроде учетных данных Basic Auth, и если вы не предоставите их, вы обычно получаете:

  • 400 bad request, если они хорошо с сообщением не говоря «нет полномочий»
  • 404 not found если они играют скромен и не хочу, не уполномоченные люди, чтобы знать, что есть действующий ресурс там
  • или, может быть, даже 403 Forbidden

Если это не получится быть учетные данные, добавьте их после создания и звоните, но перед вами toss(). Если вы положите его до post(), он потерпит неудачу. Кроме того, это имя пользователя API &, а не любой пользователь, которого вы пытаетесь создать в системе. Иногда они упоминаются в API: client_id и client_secret или API_KEY и API_SECRET, но это всего лишь идентификатор и общий секрет.

Так что последнее, что будет выглядеть

.post("https://blah.blah.blah.com", "some json...", "some more json...") 

.auth("api_username", "api_password") 

.expectStatus(200) 

.toss(); 

Фрисби преобразует исходный текст имя пользователя/пароль к действительному базы 64 кодирования строки и вставить его в заголовке Authorization: (вероятно, почему это должно произойти после вызова post())

Кроме того, я хочу, чтобы явное добавление заголовков с использованием addHeader(header, content) забрасывание большого неприятного blob json в post(), но это только мое предпочтение.

Удачи!

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