如何解决NodeJS-如何获得URL的响应?
我有一个网址地址。当我在浏览器中访问该地址时,它会显示一个json文件。我需要在NodeJs中获取该json文件。
我该怎么做?
编辑:这是我当前的代码:
const got = require('got');
var url = "https://www.instagram.com/p/CFcyO54Hc7k/?__a=1";
got(url).json().then(result => {
console.log(result);
}).catch(err => {
console.log(err);
});
这就是我得到的结果:
Promise { <pending> }
Hint: hit control+c anytime to enter REPL.
RequestError: Unexpected token < in JSON at position 0 in "https://www.instagram.com/accounts/login/?next=/p/CFcyO54Hc7k/%3F__a%3D1"
at Object.parseBody [as default] (/home/runner/VengefulUltimateSdk/node_modules/got/dist/source/as-promise/parse-body.js:22:15)
at /home/runner/VengefulUltimateSdk/node_modules/got/dist/source/as-promise/index.js:157:40
at JSON.parse (<anonymous>)
at parseJson (/home/runner/VengefulUltimateSdk/node_modules/got/dist/source/index.js:118:35)
at Object.parseBody [as default] (/home/runner/VengefulUltimateSdk/node_modules/got/dist/source/as-promise/parse-body.js:11:48)
at /home/runner/VengefulUltimateSdk/node_modules/got/dist/source/as-promise/index.js:157:40
at processTicksAndRejections (internal/process/task_queues.js:97:5) {
name: 'ParseError',code: undefined,timings: {
start: 1601274389096,socket: 1601274389096,lookup: 1601274389106,connect: 1601274389117,secureConnect: 1601274389128,upload: 1601274389128,response: 1601274389467,end: 1601274389511,error: undefined,abort: undefined,phases: {
wait: 0,dns: 10,tcp: 11,tls: 11,request: 0,firstByte: 339,download: 44,total: 415
}
}
}
我的节点版本为12.16.1
解决方法
如果要以json的形式获取它,可以使用访存api(https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API),然后在promise中可以将json作为对象读入js代码中。
fetch('http://server/file.json').then(resp=>resp.json()).then(data=>{do something with data});
,
您可以自己解析JSON,也可以获取用于发出Http请求的库,该库会自动为您解析JSON。 here中有很多库可供选择。我最喜欢的是got()
,它将使您能够通过添加简单的.json()
来解析JSON,因此返回的解析值是Javascript对象。
const got = require('got');
got("https://www.instagram.com/p/CFcyO54Hc7k/?__a=1").json().then(result => {
console.log(result);
}).catch(err => {
console.log(err);
});
当我用您的instagram URL运行以上代码时,我又得到了这个Javascript对象:
{
graphql: {
shortcode_media: {
__typename: 'GraphSidecar',id: '2404017227651993316',shortcode: 'CFcyO54Hc7k',dimensions: [Object],gating_info: null,fact_check_overall_rating: null,fact_check_information: null,sensitivity_friction_info: null,media_overlay_info: null,media_preview: null,display_url: 'https://scontent-sjc3-1.cdninstagram.com/v/t51.2885-15/e35/119980944_890957481429986_8757958615208227911_n.jpg?_nc_ht=scontent-sjc3-1.cdninstagram.com&_nc_cat=102&_nc_ohc=w7zBW_FdRNgAX9BYknl&_nc_tp=18&oh=11424efc118b55180e4d3302d75181ca&oe=5F99EB23',display_resources: [Array],is_video: false,tracking_token: 'eyJ2ZXJzaW9uIjo1LCJwYXlsb2FkIjp7ImlzX2FuYWx5dGljc190cmFja2VkIjp0cnVlLCJ1dWlkIjoiZGIyMzdkMzgzYWVhNDY5YmI0ZWVkZWI4YzlhZDY0YWUyNDA0MDE3MjI3NjUxOTkzMzE2In0sInNpZ25hdHVyZSI6IiJ9',edge_media_to_tagged_user: [Object],edge_media_to_caption: [Object],caption_is_edited: false,has_ranked_comments: false,edge_media_to_parent_comment: [Object],edge_media_to_hoisted_comment: [Object],edge_media_preview_comment: [Object],comments_disabled: false,commenting_disabled_for_viewer: false,taken_at_timestamp: 1600801207,edge_media_preview_like: [Object],edge_media_to_sponsor_user: [Object],location: null,viewer_has_liked: false,viewer_has_saved: false,viewer_has_saved_to_collection: false,viewer_in_photo_of_you: false,viewer_can_reshare: true,owner: [Object],is_ad: false,edge_web_media_to_related_media: [Object],edge_sidecar_to_children: [Object],edge_related_profiles: [Object]
}
}
}
如果您想修改现有代码,则可能需要使用JSON.parse()
。您必须将现有代码添加到您的问题中,以帮助我们解决问题。
您可以在NodeJS中使用axios。
axios.get('https://someapiendpoint.domain.com/v1/api')
.then((response) => {
console.log(response.data);
});
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。