Ответ метода NetSuite https.post() выдает ошибку «Неожиданный символ, встречающийся при анализе значения: S. Path «, строка 0, позиция 0»

#javascript #json #https #netsuite #suitescript2.0

#javascript #json #https #netsuite #suitescript2.0

Вопрос:

Я пытаюсь отправить приведенный ниже запрос данных JSON в стороннюю систему, используя модули https.post () «N / https». метод post ().

Я получаю код ответа как «200» с сообщением об ошибке «Неожиданный символ, обнаруженный при анализе значения: S. Path «, строка 0, позиция 0»

Пожалуйста, обратитесь к моему коду, приведенному ниже

 var requestData = {
    "terminal": "345678",
    "user": "TestUser1234",
    "password": "XXXXXX",
    "Currency": "USD",
    "Total": "25",
    "GoodURL": "https://gatewayxx.test.com/sandbox/landingpage",
    "Language": "EN"
};

log.debug('Typeof - RequestData: ', typeof requestData);

var headerObj = new Array();
headerObj['Content-Type'] = 'application/json';
headerObj['Accept'] = 'application/json';

var response = https.post({
    url: "https://gatewayxx.test.com",
    body: requestData
});
  

Сообщение HTTPS POST отвечает на сообщение:

 {
    "type": "http.ClientResponse",
    "code": 200,
    "headers": {
        "Cache-Control": "private",
        "Server": "Microsoft-IIS/7.5",
        "Content-Length": "152",
        "Date": "Fri, 02 Oct 2020 05:44:47 GMT",
        "Content-Type": "text/html; charset=utf-8",
        "Via": "1.1 mono002"
    },
    "body": "{"URL":"","ConfirmationKey":"","Error":{"ErrCode":599,"ErrMsg":"Unexpected character encountered while parsing value: S. Path '', line 0, position 0."}}"
}
  

Я проверяю данные своего запроса в валидаторе JSON, в нем нет ошибки. Также в коде я проверил его с помощью свойства typeof . Он также показывает его как «объект».

Также, если вы заметили ответное сообщение, оно выдает ответ «Content-Type» как «text / html» вместо данных JSON.

Я не уверен, какую ошибку я совершаю при отправке данных JSON, может кто-нибудь помочь мне разобраться в этой проблеме.

Заранее большое спасибо.

Ответ №1:

Вы указываете данные JSON в качестве типа содержимого в заголовках, но вы передаете объект JavaScript в теле. Вам необходимо преобразовать объект в строку JSON:

 var response = https.post({
    url: "https://gatewayxx.test.com",
    body: JSON.stringify(requestData)
});
  

Кроме того, как указал bluehank, вы не отправляете заголовки с запросом — вы, вероятно, имеете в виду:

 var response = https.post({
    url: "https://gatewayxx.test.com",
    body: JSON.stringify(requestData),
    headers: headerObj
});
  

Комментарии:

1. Привет, Криптон, большое спасибо за быстрый ответ. Вы правы, я передаю объект Javascript и в заголовке указываю его как формат «JSON». Я думал, что JSON и JS-объект одинаковы. Теперь я попробовал использовать JSON.stringify(), он работает отлично. Еще раз спасибо за помощь.

Ответ №2:

Кажется, вы создаете заголовок для своего запроса, но в итоге вы не используете его в запросе post. Какая-либо конкретная причина?

Когда вы получаете код ответа 200, это означает, что запрос POST прошел правильно. Однако все, что вы пытаетесь получить, вызывает ошибку. Более конкретно, вы получаете код ошибки 599, который обычно используется для тайм-аута на большинстве прокси. Таким образом, проблема может исходить не от вас, а от используемого вами API

Комментарии:

1. Привет, bluehank, ты прав. Я пропустил добавление заголовков в свой запрос post. Изначально я использовал в скрипте, как вы упомянули. Я получаю «Неожиданный код ошибки 599». Поэтому я удалил заголовок и попробовал его. Большое спасибо за более быстрый ответ.