You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS Lambda HTTPS请求报错connect ECONNREFUSED 127.0.0.1:443求助

问题排查与修复方案

嘿,这个connect ECONNREFUSED 127.0.0.1:443错误其实很好解决——核心问题是你用错了Node.js原生https.request()的参数格式,它和你可能习惯的第三方请求库(比如request)的格式不一样,导致模块误以为要连接本地服务器!

错误原因

Node.js的https.request()方法不支持url这个顶层选项,它需要你把目标地址拆分成hostname、path、port(可选,443默认)这些独立字段。你当前的options里只写了url,模块无法正确解析,就默认尝试连接本地127.0.0.1的443端口,自然就被拒绝了。

另外,你代码里用了req.write()发送请求体,说明这是一个POST请求,但你没有在options里指定method: 'POST',而且请求头里也缺少Content-Type: application/json,服务器可能无法正确解析你的请求数据。

修复后的代码

这里提供两种修复方式,选一种就行:

方式1:手动拆分URL参数

const https = require('https'); 

let headers = { 
  'Authorization': 'ApiKey {key}',
  'Content-Type': 'application/json' // 新增,告诉服务器请求体是JSON格式
}; 

let options = {
  hostname: 'myds.io', // 提取目标域名部分
  path: '/api/external/patients/events/medications/', // 提取目标路径部分
  method: 'POST', // 明确指定POST请求方法
  headers: headers
}; 

exports.handler = (event, context, callback) => { 
  const req = https.request(options, (res) => { 
    let body = ''; 
    console.log('Status:', res.statusCode); 
    console.log('Headers:', JSON.stringify(res.headers)); 
    res.setEncoding('utf8'); 
    res.on('data', (chunk) => body += chunk); 
    res.on('end', () => { 
      console.log('Successfully processed HTTPS response'); 
      // 兼容可能的Content-Type写法,判断是否为JSON格式
      if (res.headers['content-type']?.includes('application/json')) { 
        body = JSON.parse(body); 
      } 
      callback(null, body); 
    }); 
  }); 

  req.on('error', (err) => {
    console.error('Request error:', err);
    callback(err);
  }); 

  // 避免event.data不存在时报错,增加判断
  if (event.data) {
    req.write(JSON.stringify(event.data)); 
  }
  req.end(); 
}; 

方式2:用url模块自动解析URL(更省心)

如果你的目标URL可能变化,用Node.js内置的url模块自动解析会更稳妥:

const https = require('https'); 
const url = require('url'); // 引入内置url模块

let headers = { 
  'Authorization': 'ApiKey {key}',
  'Content-Type': 'application/json'
}; 

const targetUrl = 'https://myds.io/api/external/patients/events/medications/';
const parsedUrl = url.parse(targetUrl);

let options = {
  hostname: parsedUrl.hostname,
  path: parsedUrl.path,
  method: 'POST',
  headers: headers
}; 

// 后续handler逻辑和方式1完全一致
exports.handler = (event, context, callback) => { 
  // ... 同上代码 ...
};

额外检查点

如果修复代码后还是有问题,再排查这几点:

  • 你的Lambda函数是否部署在VPC中?如果是,需要确保VPC配置了NAT网关(私有子网场景)或互联网网关(公有子网场景),否则Lambda无法访问外部公网服务。
  • 目标服务器myds.io是否能正常访问?可以在本地用curl测试验证:
    curl -X POST -H "Authorization: ApiKey {key}" -H "Content-Type: application/json" -d '{"test":"sample-data"}' https://myds.io/api/external/patients/events/medications/
    
  • 确认你的API Key是正确的,没有拼写错误或过期。

内容的提问来源于stack exchange,提问作者Pankesh Patel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:48:56