我想我错过了关于http和https请求的内容
我有一个包含URL的变量,例如:
http(s)://website.com/a/b/file.html
我想知道是否有一种简单的方法来请求该URI来获取数据
要发出http(s)请求,这就是我现在要做的事情:
website.com
和`/a/b/file.html 这是必须的还是更简单的解决方案,不涉及获取主机名和路径,并测试该网站是否为http或https?
编辑:我无法使用http.get,因为我需要提供一些特定的选项
答案 0 :(得分:2)
为了从URL中获取所有组件,您需要解析它。节点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) => {...
答案 1 :(得分:0)
对于到此为止的用户,protocol
包括:
,而pathname
不包括search
,因此必须手动添加。不应该解析参数,因为它们是不需要的(这样可以节省计算时间:)
在函数内进行请求并不是真正的最佳实践,并且此代码可能最终会在函数内进行,因此进行了所有改进,因此我将答案重写为:
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) => { ...