Demo代码(Golang)

阿星

发布于:2025-06-17

package main

import (
	"bytes"
	"encoding/json"
	"fmt"
	"net/http"
	"time"
)

type TaskResponse struct {
	Code int    `json:"code"`
	Msg  string `json:"msg"`
	Data struct {
		TaskID string `json:"taskId"`
	} `json:"data"`
}

type TaskRequest struct {
	Remark string        `json:"remark"`
	AppID  string        `json:"appId"`
	Inputs []TaskInput   `json:"inputs"`
}

type TaskInput struct {
	Name  string `json:"name"`
	Value string `json:"value"`
}

func main() {
	url := "https://api.comfylink.com/v1/openapi/tasks"
	reqBody := TaskRequest{
		Remark: "",
		AppID:  "YOUR_APPID",
		Inputs: []TaskInput{
			{Name: "6:text", Value: "test ..."},
		},
	}
	bodyBytes, err := json.Marshal(reqBody)
	if err != nil {
		fmt.Println("请求体序列化失败:", err)
		return
	}

	req, err := http.NewRequest("POST", url, bytes.NewBuffer(bodyBytes))
	if err != nil {
		fmt.Println("创建请求失败:", err)
		return
	}
	req.Header.Set("X-API-Key", "YOUR_API_KEY")
	req.Header.Set("X-Client-Id", "YOUR_UUID")
	req.Header.Set("Content-Type", "application/json")

	client := &http.Client{Timeout: 10 * time.Second}
	resp, err := client.Do(req)
	if err != nil {
		fmt.Println("请求失败:", err)
		return
	}
	defer resp.Body.Close()

	if resp.StatusCode != http.StatusOK {
		fmt.Printf("HTTP请求失败,状态码: %d\n", resp.StatusCode)
		return
	}

	var res TaskResponse
	if err := json.NewDecoder(resp.Body).Decode(&res); err != nil {
		fmt.Println("响应解析失败:", err)
		return
	}

	if res.Code == 0 {
		fmt.Println("任务创建成功,任务ID:", res.Data.TaskID)
	} else {
		fmt.Println("任务创建失败:", res.Msg)
	}
}
package main

import (
	"encoding/json"
	"fmt"
	"net/http"
	"time"
)

func main() {
	taskID := "创建任务返回的任务ID" // 替换为实际任务ID
	url := fmt.Sprintf("https://api.comfylink.com/v1/openapi/tasks/%s", taskID)

	req, err := http.NewRequest("DELETE", url, nil)
	if err != nil {
		fmt.Println("创建请求失败:", err)
		return
	}
	req.Header.Set("X-API-Key", "YOUR_API_KEY")
	req.Header.Set("X-Client-Id", "YOUR_UUID")

	client := &http.Client{Timeout: 10 * time.Second}
	resp, err := client.Do(req)
	if err != nil {
		fmt.Println("请求失败:", err)
		return
	}
	defer resp.Body.Close()

	if resp.StatusCode != http.StatusOK {
		fmt.Printf("HTTP请求失败,状态码: %d\n", resp.StatusCode)
		return
	}

	var res struct {
		Code int    `json:"code"`
		Msg  string `json:"msg"`
	}

	if err := json.NewDecoder(resp.Body).Decode(&res); err != nil {
		fmt.Println("响应解析失败:", err)
		return
	}

	if res.Code == 0 {
		fmt.Println("任务已取消")
	} else {
		fmt.Println("取消任务失败:", res.Msg)
	}
}
package main

import (
	"encoding/json"
	"fmt"
	"net/http"
	"time"
)

func main() {
	taskID := "创建任务返回的任务ID" // 替换为实际任务ID
	url := fmt.Sprintf("https://api.comfylink.com/v1/openapi/tasks/%s", taskID)

	req, err := http.NewRequest("GET", url, nil)
	if err != nil {
		fmt.Println("创建请求失败:", err)
		return
	}
	req.Header.Set("X-API-Key", "YOUR_API_KEY")
	req.Header.Set("X-Client-Id", "YOUR_UUID")

	client := &http.Client{Timeout: 10 * time.Second}
	resp, err := client.Do(req)
	if err != nil {
		fmt.Println("请求失败:", err)
		return
	}
	defer resp.Body.Close()

	if resp.StatusCode != http.StatusOK {
		fmt.Printf("HTTP请求失败,状态码: %d\n", resp.StatusCode)
		return
	}

	var res struct {
		Code int    `json:"code"`
		Msg  string `json:"msg"`
		Data struct {
			Status  string      `json:"status"`
			Message string      `json:"message"`
			Outputs interface{} `json:"outputs"`
		} `json:"data"`
	}

	if err := json.NewDecoder(resp.Body).Decode(&res); err != nil {
		fmt.Println("响应解析失败:", err)
		return
	}

	if res.Code == 0 {
		switch res.Data.Status {
		case "finished":
			fmt.Println("任务完成,输出:", res.Data.Outputs)
		case "failed":
			fmt.Println("任务失败:", res.Data.Message)
		case "canceled":
			fmt.Println("任务已取消:", res.Data.Message)
		case "pending":
			fmt.Println("任务排队中:", res.Data.Message)
		default:
			fmt.Println("未知状态:", res.Data.Status)
		}
	} else {
		fmt.Println("查询失败:", res.Msg)
	}
}
package main

import (
	"bytes"
	"encoding/json"
	"fmt"
	"io"
	"mime/multipart"
	"net/http"
	"os"
	"time"
)

func main() {
	url := "https://api.comfylink.com/v1/openapi/files"

	file, err := os.Open("comfylink.jpg")
	if err != nil {
		fmt.Println("打开文件失败:", err)
		return
	}
	defer file.Close()

	body := &bytes.Buffer{}
	writer := multipart.NewWriter(body)
	part, err := writer.CreateFormFile("file", "comfylink.jpg")
	if err != nil {
		fmt.Println("创建表单文件失败:", err)
		return
	}
	if _, err := io.Copy(part, file); err != nil {
		fmt.Println("写入文件内容失败:", err)
		return
	}
	if err := writer.Close(); err != nil {
		fmt.Println("关闭表单写入器失败:", err)
		return
	}

	req, err := http.NewRequest("POST", url, body)
	if err != nil {
		fmt.Println("创建请求失败:", err)
		return
	}
	req.Header.Set("X-API-Key", "YOUR_API_KEY")
	req.Header.Set("X-Client-Id", "YOUR_UUID")
	req.Header.Set("Content-Type", writer.FormDataContentType())

	client := &http.Client{Timeout: 20 * time.Second}
	resp, err := client.Do(req)
	if err != nil {
		fmt.Println("请求失败:", err)
		return
	}
	defer resp.Body.Close()

	if resp.StatusCode != http.StatusOK {
		fmt.Printf("HTTP请求失败,状态码: %d\n", resp.StatusCode)
		return
	}

	var res struct {
		Code int    `json:"code"`
		Msg  string `json:"msg"`
		Data struct {
			Path string `json:"path"`
		} `json:"data"`
	}

	if err := json.NewDecoder(resp.Body).Decode(&res); err != nil {
		fmt.Println("响应解析失败:", err)
		return
	}

	if res.Code == 0 {
		fmt.Println("文件上传成功,访问地址:", res.Data.Path)
	} else {
		fmt.Println("文件上传失败:", res.Msg)
	}
}
package main

import (
	"encoding/json"
	"fmt"
	"log"
	"net/http"
	"net/url"
	"os"
	"os/signal"
	"syscall"

	"github.com/gorilla/websocket"
)

func handleWebSocket(conn *websocket.Conn) {
	for {
		_, message, err := conn.ReadMessage()
		if err != nil {
			if websocket.IsCloseError(err, websocket.CloseNormalClosure, websocket.CloseGoingAway) {
				log.Println("WebSocket 连接已关闭")
			} else {
				log.Println("读取消息失败:", err)
			}
			return
		}

		var resp struct {
			Code int    `json:"code"`
			Msg  string `json:"msg"`
			Data struct {
				Status  string      `json:"status"`
				Message string      `json:"message"`
				Outputs interface{} `json:"outputs"`
			} `json:"data"`
		}

		if err := json.Unmarshal(message, &resp); err != nil {
			log.Printf("JSON解析失败: %s\n原始数据: %s\n", err, string(message))
			continue
		}

		if resp.Code != 0 {
			log.Printf("接口返回异常: %s", resp.Msg)
			continue
		}

		switch resp.Data.Status {
		case "finished":
			fmt.Println("【任务完成】")
			fmt.Println("输出结果:", resp.Data.Outputs)
		case "failed":
			fmt.Println("【任务失败】错误信息:", resp.Data.Message)
		case "canceled":
			fmt.Println("【任务已取消】原因:", resp.Data.Message)
		case "pending":
			fmt.Println("【任务排队中】当前状态:", resp.Data.Message)
		default:
			fmt.Println("未知状态:", resp.Data.Status)
		}
	}
}

func main() {
	u := url.URL{Scheme: "wss", Host: "api.comfylink.com", Path: "/v1/openapi/ws"}
	headers := http.Header{}
	headers.Add("X-API-Key", "YOUR_API_KEY")
	headers.Add("X-Client-Id", "YOUR_UUID")

	conn, _, err := websocket.DefaultDialer.Dial(u.String(), headers)
	if err != nil {
		fmt.Fprintf(os.Stderr, "连接失败: %v\n", err)
		os.Exit(1)
	}
	defer conn.Close()

	// 支持 Ctrl+C 友好退出
	interrupt := make(chan os.Signal, 1)
	signal.Notify(interrupt, os.Interrupt, syscall.SIGTERM)
	go func() {
		<-interrupt
		fmt.Println("\n收到中断信号,关闭连接。")
		conn.WriteMessage(websocket.CloseMessage, websocket.FormatCloseMessage(websocket.CloseNormalClosure, ""))
		conn.Close()
		os.Exit(0)
	}()

	handleWebSocket(conn)
}

提交反馈