Отправить запрос с Node не удается, но работает с Python - PullRequest
0 голосов
/ 30 июня 2018

Я пытаюсь использовать API анализа настроений для некоторых твитов, которые я транслировал. Рассматриваемый API выглядит так: http://sentiment.vivekn.com/docs/api/. Я уже делал это раньше в Python, и он работал как ожидалось. Я сделал пост-запрос, используя библиотеку запросов, и отправил объект JSON с моим контентом. Объект JSON выглядел примерно так:

{
    "txt": "The content of the tweet."
}

В Python отправка почтового запроса выглядела примерно так:

url = "http://sentiment.vivekn.com/api/text/"
data_dict = {
    "txt": "hi"
}

r = requests.post(url,json.loads(json.dumps(data_dict)))

print(r.text)

Теперь я признаю, что я новичок в Javascript и веб-программировании в целом, но я предполагаю, что логика должна быть одинаковой на обоих языках. Я пытался использовать метод XMLHttpRequest, но он всегда возвращал внутреннюю ошибку сервера с кодом состояния: 500.

Веб-сайт работает, он принимает почтовые запросы и отвечает анализом, но я не могу заставить его работать с Node. Это то, с чем я работаю в Javascript:

const rp = require('request-promise');

var options = {
    method: 'POST',
    uri: 'http://sentiment.vivekn.com/api/text/',
    body: {
        "txt": "This is a very negative sentence, so we should get a negative analysis!"
    },
    json: true // Automatically stringifies the body to JSON
};

rp(options)
    .then(function (parsedBody) {
        console.log("Request received");
        console.log(parsedBody);
    })
    .catch(function (err) {
        console.log("Something went wrong\n" + err);
    });

Это всегда ловит ошибку с кодом состояния 500. Я пробовал несколько других методов, включая выполнение запроса с XMLHttpRequest. Ничто не похоже на работу. Было бы замечательно, если бы кто-то мог указать, где я иду не так.

1 Ответ

0 голосов
/ 30 июня 2018

Это не ответ, но я подумал, что было бы полезно показать некоторый код, вызывающий другой ответ, который может быть подсказкой, которая поможет отладить проблему.

Я получаю такой же ответ с curl:

jim-macbookpro:~/development/node/so$ curl -X POST 'http://sentiment.vivekn.com/api/text/' -H "Content-Type: application/json" -d '{"txt": "hi"}'
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<title>500 Internal Server Error</title>
<h1>Internal Server Error</h1>
<p>The server encountered an internal error and was unable to complete your request.  Either the server is overloaded or there is an error in theapplication.</p>

Я изменил пример для использования 'node-fetch', и я не получаю 500, скорее, я получаю 405 - МЕТОД НЕ РАЗРЕШЕН.

Я подозреваю, что это проблема с сервером, который как-то очень требователен к формату запроса.

Надеюсь, это поможет.

const fetch = require('node-fetch');

fetch('http://sentiment.vivekn.com/api/text', {
    method: 'POST',
    headers: {
        'Content-Type': 'application/json'
    },
    body: JSON.stringify({
        txt:
            'This is a very negative sentence, so we should get a negative analysis!'
    })
})
    .then(function(parsedBody) {
        console.log('Request received');
        console.log(parsedBody);
    })
    .catch(function(err) {
        console.log('Something went wrong\n' + err);
    });
...