edi*_*999 5 https http node.js
我认为我缺少有关HTTP和https请求的信息
我有一个包含URL的变量,例如:
http(s)://website.com/a/b/file.html
我想知道是否有一种简单的方法可以对该URI进行请求以获取数据
要发出http(s)Request,这是我现在要做的:
website.com和`/a/b/file.html这是必须的吗?或者它们是更简单的解决方案,而无需涉及主机名和路径,以及测试网站是否位于http或https中?
编辑:我不能使用http.get,因为我需要放置一些特定选项
为了从 URL 中获取所有组件,您需要解析它。Node v0.10.13 有稳定的模块:url.parse
这是如何执行此操作的简单示例:
var q = url.parse(urlStr, true);
var protocol = (q.protocol == "http") ? require('http') : require('https');
let options = {
path: q.pathname,
host: q.hostname,
port: q.port,
};
protocol.get(options, (res) => {...
Run Code Online (Sandbox Code Playgroud)
对于此处结束的内容,protocol包括:和pathname不包括,search因此必须手动添加。不应解析参数,因为不需要它们(因此您可以节省计算时间:)
此外,在函数内部进行 require 并不是真正的最佳实践,并且这段代码可能最终会在函数内部,因此具有所有这些改进,所以我将重写答案,如下所示:
import * as url from 'url';
import * as https from 'https';
import * as http from 'http';
const uri = url.parse(urlStr);
const { request } = uri.protocol === 'https:' ? https : http;
const opts = {
headers, // Should be defined somewhere...
method: 'GET',
hostname: uri.hostname,
port: uri.port,
path: `${uri.pathname}${uri.search}`,
protocol: uri.protocol,
};
const req = request(opts, (resp) => { ...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2643 次 |
| 最近记录: |