使用go语言封装调用第三方接口的示例
package service
import (
"xxx/src/config"
"xxx/src/models"
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
"net/url"
"strconv"
"strings"
)
type HuaSoulEchoRespones struct {
Code int `from:"code" json:"code"`
Status map[string]interface{} `from:"status" json:"status"`
ISLIU string `from:"ISLIU" json:"ISLIU"`
}
func (client *Client) HuaSoulEchoAPI(msg *SendMsg) (int, map[string]interface{}, string, error) {
ChatReustParam := models.EchoChatParm{
Auth: "1d527cbf2cd50ad7e97f0aa23xxxxxxx",
Type: msg.Type,
IsliuId: client.conversation.IsliuId,
Content: msg.Content,
}
fmt.Println(ChatReustParam)
request_url := config.Conf.SoulUrl + "/soul/echo"
fmt.Println("Echo request_url", request_url)
postData := url.Values{}
postData.Add("auth", ChatReustParam.Auth)
postData.Add("type", strconv.Itoa(ChatReustParam.Type))
postData.Add("ISLIUid", ChatReustParam.IsliuId)
postData.Add("content", ChatReustParam.Content)
resp, err := http.Post(request_url, "application/x-www-form-urlencoded", strings.NewReader(postData.Encode()))
if err != nil {
fmt.Println("会话响应失败,请稍后重试:", err)
return 0, nil, "", err
}
defer resp.Body.Close()
fmt.Println("Response status:", resp.Status)
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
fmt.Println("读取会话响应数据失败,请稍后重试:", err)
return 0, nil, "", err
}
var response HuaSoulEchoRespones
err = json.Unmarshal(body, &response)
if err != nil {
fmt.Println("数字人调用会话接口失败,无法获取意识流:", err)
return 0, nil, "", err
}
fmt.Println("Code:", response.Code)
fmt.Println("ISLIUid:", response.Status)
fmt.Println("ISLIUid:", response.ISLIU)
return response.Code, response.Status, response.ISLIU, nil
}
go语言如何实现调用第三方接口传输文件流
package service
import (
"bytes"
"encoding/json"
"fmt"
"io"
"io/ioutil"
"log"
"mime/multipart"
"net/http"
"os"
"strconv"
)
type SoulNeuralRequest struct {
Auth string `json:"auth"`
Type int `json:"type"`
ISLIUid string `json:"ISLIUid"`
CFN string `json:"CFN"`
}
type SoulNeuralResponse struct {
Code int `json:"code"`
}
func SoulNeuralFileUpload(Neuralurl string, request SoulNeuralRequest, fileName string) ([]byte, error) {
fmt.Println("NeuralFileUpload request_url", Neuralurl)
client := &http.Client{}
var bodyBuf bytes.Buffer
writer := multipart.NewWriter(&bodyBuf)
writer.WriteField("auth", request.Auth)
writer.WriteField("type", strconv.Itoa(request.Type))
writer.WriteField("ISLIUid", request.ISLIUid)
staticNetworkFile, err := os.Open(fileName)
if err != nil {
fmt.Println("Failed to open file:", err)
return nil, err
}
defer staticNetworkFile.Close()
fileWriter, err := writer.CreateFormFile("CFN", fileName)
if err != nil {
fmt.Println("Failed to create form file:", err)
return nil, err
}
_, err = io.Copy(fileWriter, staticNetworkFile)
if err != nil {
fmt.Println("Failed to copy file data:", err)
return nil, err
}
writer.Close()
req, err := http.NewRequest("POST", Neuralurl, &bodyBuf)
if err != nil {
fmt.Println("Failed to create request:", err)
return nil, err
}
req.Header.Set("Content-Type", writer.FormDataContentType())
resp, err := client.Do(req)
if err != nil {
fmt.Println("Failed to send request:", err)
return nil, err
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
return nil, err
}
var response SoulNeuralResponse
if resp.StatusCode == 201 {
err = json.Unmarshal(body, &response)
log.Println("response.Code: ", response.Code)
if err != nil {
return nil, err
}
return nil, fmt.Errorf("error from server: %v", response.Code)
} else if resp.StatusCode == 200 {
fmt.Printf("响应状态码%d, 神经网络记忆文件上传【 %d字节 】 \n", resp.StatusCode, len(body))
return body, nil
}
return nil, fmt.Errorf("unexpected server response: %v", resp.Status)
}
func SoulNeuralFileDownload(Neuralurl string, request SoulNeuralRequest, fileName string) error {
fmt.Println("NeuralFileDownload request_url", Neuralurl)
client := &http.Client{}
bodyBuf := &bytes.Buffer{}
writer := multipart.NewWriter(bodyBuf)
writer.WriteField("auth", request.Auth)
writer.WriteField("type", fmt.Sprintf("%d", request.Type))
writer.WriteField("ISLIUid", request.ISLIUid)
err := writer.Close()
if err != nil {
fmt.Println("Failed to close writer:", err)
return err
}
req, err := http.NewRequest("POST", Neuralurl, bodyBuf)
if err != nil {
fmt.Println("Failed to create request:", err)
return err
}
req.Header.Set("Content-Type", writer.FormDataContentType())
resp, err := client.Do(req)
if err != nil {
fmt.Println("Failed to send request:", err)
return err
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
return err
}
var response SoulNeuralResponse
if resp.StatusCode == 200 {
file, err := os.Create(fileName)
if err != nil {
fmt.Println("Failed to create file:", err)
return err
}
defer file.Close()
_, err = file.Write(body)
if err != nil {
fmt.Println("Failed to write file:", err)
return err
}
fmt.Println("文件下载完成")
fmt.Printf("响应状态码%d, 神经网络记忆文件下载【%d字节】\n", resp.StatusCode, len(body))
} else {
err = json.Unmarshal(body, &response)
fmt.Println("请求失败,状态码:", resp.StatusCode, " response.Code: ", response.Code)
return fmt.Errorf("error from server: %v", response.Code)
}
return nil
}