Node.js 节点和chrome中请求的API响应不同的原因?

Node.js 节点和chrome中请求的API响应不同的原因?,node.js,request,Node.js,Request,所以我有一堆来自Spotify API的曲目,我想要它们的类型(Spotify没有提供),所以对于每一首曲目,我都会对Last FM进行API调用,以获取它们的顶级标签。现在这适用于大多数曲目,我必须将曲目名称和艺术家作为字符串匹配到最后一个fm: 这是我的问题: 我喜欢这样(伪:ish代码): 使用 现在有几首歌让我感到困惑。大约600分之10。我从lastFM得到的回复是: { error: 6, message: 'Track not found', links: [] } 为了再次检查

所以我有一堆来自Spotify API的曲目,我想要它们的类型(Spotify没有提供),所以对于每一首曲目,我都会对Last FM进行API调用,以获取它们的顶级标签。现在这适用于大多数曲目,我必须将曲目名称和艺术家作为字符串匹配到最后一个fm:

这是我的问题:
我喜欢这样(伪:ish代码):

使用

现在有几首歌让我感到困惑。大约600分之10。我从lastFM得到的回复是:

{ error: 6, message: 'Track not found', links: [] }
为了再次检查,我打印了使用的url:

"http://lastfmapi.com/?artist="+track.artist+"?track="+track.name
在内部,然后调用并响应

现在,如果我从输出中复制该url并将其粘贴到我的chrome浏览器地址栏中,API将找到该轨迹

实际示例

http://ws.audioscrobbler.com/2.0/?method=track.gettoptags&artist=pugh+rogefeldt&track=små+lätta+moln&autocorrect=1&api_key=141bed9ffc180dd9b07ac93b7e3b56d7&format=json
当在我的节点代码中调用它时,我得到

{ error: 6, message: 'Track not found', links: [] }
当在chrome地址栏中调用时,我得到

{"toptags": {
    "tag":
        [
            {
                "count":100,
                "name":"swedish",
                "url":"https://www.last.fm/tag/swedish"
            },
            {
                "count":100,
                "name":"singer-songwriter",
                "url":"https://www.last.fm/tag/singer-songwriter"
            }, 
            ...
        ],
        "@attr":{
            "artist":"Pugh Rogefeldt",
            "track":"Små lätta moln"
        }
    }
} 

有人知道这一差异背后的原因吗?

Chrome地址栏将为您将字符串编码为URL,这将使您的实际示例成为

method=track.gettoptags&artist=pugh+rogefeldt&track=sm%C3%A5+l%C3%A4tta+moln&autocorrect=1&api_key=141bed9ffc180dd9b07ac93b7e3b56d7&format=json

您应该在节点代码中使用
encodeURIComponent

执行相同的操作,我怀疑这是字符编码。他们是田径场上一些奇怪的角色,以你为例。我不确定解决方案,但希望这能引导你自己或其他用户找到答案。是的!看来你是对的!我将这个url从chrome复制到vscode中,注意到“å”变成了“%C3%A5”。所以我用奇怪的字母替换了所有的字母!现在它工作了!谢谢
method=track.gettoptags&artist=pugh+rogefeldt&track=sm%C3%A5+l%C3%A4tta+moln&autocorrect=1&api_key=141bed9ffc180dd9b07ac93b7e3b56d7&format=json