使用Node的发布请求失败,但可用于Python

时间:2018-06-30 06:56:56

标签: node.js xmlhttprequest python-requests

我正在尝试将情绪分析API用于我流式传输的一些推文。有问题的API是这样的:http://sentiment.vivekn.com/docs/api/。我之前在Python中已经做到了这一点,并且按预期工作。我使用请求库发出了发布请求,并发送了带有内容的JSON对象。 JSON对象看起来像这样:

<div class="flexbox">
  <div class="left-nav">
    <a href="#">Link1</a>
    <a href="#">Link2</a>
    <a href="#">Link3</a>
    <a href="#">Link4</a>
    <a href="#">Link5</a>
    <a href="#">Link6</a>
    <a href="#">Link7</a>
    <a href="#">Link8</a>

  </div>
  <div class="logo">
    Logo
  </div>
  <div class="right-search">
    search
  </div>
</div>

在Python中,发送发布请求的过程看起来像这样:

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

现在,我承认我通常是Java语言和基于Web的编程的新手,但是我认为两种语言的逻辑应该相似。我尝试使用XMLHttpRequest方法,但是它总是返回内部服务器错误,状态码为500。

该网站可以正常工作,它可以接收发布请求并进行分析,但是我无法使其与Node一起使用。这就是我在Javascript中使用的东西:

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

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

print(r.text)

它总是会捕获状态代码500的错误。我尝试了其他几种方法,包括使用XMLHttpRequest发出请求。似乎没有任何作用。如果有人能指出我要去哪里错,那将很好。

1 个答案:

答案 0 :(得分:1)

这不是答案,但是我认为显示一些引起不同响应的代码很有用,这可能是有助于调试问题的线索。

我对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);
    });