Node.js请求直接发送到URL,带有选项(http或https)

Node.js请求直接发送到URL,带有选项(http或https),node.js,http,https,Node.js,Http,Https,我想我遗漏了一些关于http和https请求的信息 我有一个包含URL的变量,例如: http(s)://website.com/a/b/file.html 我想知道是否有一种简单的方法向该URI发出请求以获取数据 要发出http(s)请求,我现在必须执行以下操作: 测试URL是http还是https以发出适当的请求 删除http://部分并将结果放入变量中(如果在主机名中指定http或https,则会出现错误) 将主机名与路径分开:website.com和`/a/b/file.html 将此变

我想我遗漏了一些关于http和https请求的信息

我有一个包含URL的变量,例如:

http(s)://website.com/a/b/file.html

我想知道是否有一种简单的方法向该URI发出请求以获取数据

要发出http(s)请求,我现在必须执行以下操作:

  • 测试URL是http还是https以发出适当的请求
  • 删除http://部分并将结果放入变量中(如果在主机名中指定http或https,则会出现错误)
  • 将主机名与路径分开:
    website.com
    和`/a/b/file.html
  • 将此变量放入选项对象中
  • 这是必须的还是更简单的解决方案,不需要获取主机名和路径,并测试站点是否使用http或https


    编辑:我不能使用http.get,因为我需要放置一些特定的选项,以便从URL中获取所有组件,您需要对其进行解析。节点v0.10.13具有稳定的模块:

    这是一个简单的示例,说明如何执行此操作:

    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) => {...
    

    对于在此处结束的用户,
    协议
    包括
    ,而
    路径名
    不包括
    搜索
    ,因此必须手动添加。不应解析参数,因为它们不需要(这样可以节省计算时间:)

    此外,在函数中要求这样做并不是一种最佳实践,可能这段代码最终会出现在函数中,因此有了所有这些改进,因此我将重写以下内容的答案:

    import*作为“url”中的url;
    从“https”导入*作为https;
    将*作为http从“http”导入;
    consturi=url.parse(urlStr);
    const{request}=uri.protocol=='https:'?https:http;
    常量选项={
    头,//应该在某处定义。。。
    方法:“GET”,
    主机名:uri.hostname,
    端口:uri.port,
    路径:`${uri.pathname}${uri.search}`,
    协议:uri.protocol,
    };
    const req=请求(opts,(resp)=>{。。。
    
    它们是发出协议无关请求(http和https)的一种方式吗?它将解析URL,并为您提供
    协议
    变量。如果您需要两个单独的请求,您必须单独请求。协议包括
    ,因此使用此代码,您将始终请求
    https
    。此外,查询字符串丢失。请查看我的答案,如果有问题,请告诉我