360 Secure SkillHub
360 安全技能中心

SimpleHttpSkill

使用 Node.js 内置 http、https、url 模块提供通用 HTTP 客户端,可发起 GET、POST、PUT、PATCH、DELETE、HEAD、OPTIONS 请求,支持自定义请求头、JSON 请求体、超时与指数退避重试;失败时返回包含 ok、status、headers、body、error 的响应对象,不抛出异常。

stephen-standridge
stephen-standridge
热度 64.21
最近更新 2026-05-17 12:51:35
分类:开发依赖:代码执行 / 第三方 API应用场景:API 集成 / 自动化脚本

安装技能

复制下面的话术发给你的 Agent,它会通过 secure-skills 检索并安装该技能。

执行命令安装此 skill: npx secure-skills-cli add simplehttpskill
Metadata
name
simple-http
description
Make HTTP requests (GET, POST, PUT, PATCH, DELETE, HEAD, OPTIONS) with custom headers, automatic retries, and graceful error handling. Use when the user needs to call an API, fetch a URL, send webhooks, or make any HTTP request without external dependencies.

Simple HTTP Skill

Make HTTP requests using only Node.js built-in modules. Supports all standard methods, arbitrary headers, automatic retries with exponential backoff, and never throws on failure — always resolves with an inspectable response object.

Required Inputs

  • url (string): Fully qualified URL to request.
  • method (string, optional): HTTP method. Default GET.
  • headers (object, optional): Request headers.
  • body (string | Buffer | object, optional): Request body. Objects are auto-serialized to JSON.
  • maxRetries (number, optional): Retry attempts for transient failures. Default 3.
  • timeout (number, optional): Socket timeout in ms. Default 30000.

Step-by-Step Workflow

  1. Import the client from src/http-client.js:
const { HttpClient } = require("./src/http-client");
  1. Create a client instance (optionally set default headers shared across calls):
const client = new HttpClient({
  defaultHeaders: { Authorization: "Bearer <token>" },
  maxRetries: 3,
});
  1. Make requests using convenience methods or the generic request():
// GET
const resp = await client.get("https://api.example.com/items");

// POST with JSON body
const resp = await client.post("https://api.example.com/items", {
  body: { name: "widget" },
});

// PUT with custom headers
const resp = await client.put("https://api.example.com/items/1", {
  headers: { "X-Request-Id": "abc123" },
  body: { name: "updated" },
});

// DELETE
const resp = await client.delete("https://api.example.com/items/1");

// Generic form — any method
const resp = await client.request("PATCH", "https://api.example.com/items/1", {
  body: { qty: 5 },
});
  1. Inspect the response:
if (resp.ok) {
  console.log(resp.body);      // parsed JSON or raw string
  console.log(resp.status);    // e.g. 200
  console.log(resp.headers);   // response headers object
} else {
  console.log(resp.error);     // human-readable error (null if HTTP error with status)
  console.log(resp.status);    // HTTP status code or null for network errors
}

Output Format

Every call resolves with an object containing:

Key Type Description
ok boolean true if status is 2xx
status number | null HTTP status code; null for network-level errors
headers object Response headers
body any Parsed JSON (if content-type is JSON), else string
error string | null Error description on failure; null on success

Error Handling & Retry Behavior

  • Retried automatically: Connection errors, timeouts, and HTTP 429 / 5xx responses.
  • Not retried: 4xx errors (except 429) — returned immediately.
  • Backoff: Exponential with jitter (base 500ms, capped at 30s).
  • Graceful failure: The client never throws. After exhausting retries, it resolves with the last error response so the caller can always inspect resp.ok and resp.error.

Configuration Options

All options can be set at the client level (constructor) and overridden per-request:

Option Default Description
defaultHeaders {} Headers applied to every request
maxRetries 3 Max retry attempts
timeout 30000 Socket timeout in ms
backoffBase 500 Base delay (ms) for exponential backoff
backoffMax 30000 Maximum backoff delay cap (ms)

Dependencies

None — uses only Node.js built-in modules (http, https, url).