如何利用golang语言编写一个转码服务

437 ℃

golang语言开发中,如何编写一个转码服务?下面web建站小编给大家简单介绍一下具体实现代码!

客户端调用代码

package main

import (
  "fmt"
  "net/http"
  "strconv"
)
 
func main() {
  res, err := http.Get("http://localhost:8080?url=https://www.chinesegamer.net/gbk.html")
  if err != nil {
    fmt.Println(err.Error())
    return
  }
  defer res.Body.Close()
 
  contentType := res.Header.Get("Content-Type")
  if len(contentType) > 0 {
    contentType = contentType + "; "
  }
  contentType = contentType + "charset=utf-8"
  res.Header.Set("Content-Type", contentType)
  if res.StatusCode != 200 {
    fmt.Println("response Status:", res.Status)
    return
  }
 
  buf := make([]byte, 1024)
  for {
    n, err := res.Body.Read(buf)
    if n == 0 || err != nil {
      break
    }
    fmt.Print(string(buf[:n]))
  }
}

服务端代码调用

package main
 
import (
  "net/http"
  "log"
  "io/ioutil"
  "golang.org/x/net/html/charset"
)
 
func main() {
  http.HandleFunc("/", func(writer http.ResponseWriter, request *http.Request) {
    url := request.URL.Query().Get("url")
    resp, err := http.Get(url)
    if err != nil {
      log.Printf("Error fetch url: %v", err)
      http.Error(writer, err.Error(), http.StatusInternalServerError)
      return
    }
    defer resp.Body.Close()
    body, err := ioutil.ReadAll(resp.Body)
    if err != nil {
      log.Printf("Error reading body: %v", err)
      http.Error(writer, err.Error(), http.StatusInternalServerError)
      return
    }
    srcCharSet, destBody, err := charset.ToUTF8(body, "")
    if err != nil {
      log.Printf("Error convert charset: %v", err)
      http.Error(writer, err.Error(), http.StatusInternalServerError)
      return
    }
    writer.Header().Set("Content-Type", resp.Header.Get("Content-Type"))
    writer.Write(destBody)
  })
 
  log.Fatal(http.ListenAndServe(":8080", nil))
}

如何利用golang计算一个数的平方(附代码并输出结果)

golang常用的函数有哪些(函数基本用法介绍)

golang如何实现全部转换为同一种编码方式(防止字符乱码)

golang如何实现HTTP链接跳转

标签: golang, 转码服务

上面是“如何利用golang语言编写一个转码服务”的全面内容,想了解更多关于 后端开发 内容,请继续关注web建站教程。

当前网址:https://m.ipkd.cn/webs_4350.html

声明:本站提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请发送到邮箱:admin@ipkd.cn,我们会在看到邮件的第一时间内为您处理!

css3语法中Flex布局的基本介绍
vue3相对于vue2有哪些新特性?
js语法如何删除数组指定位置元素
织梦dedecms后台图集编辑器样式错乱,变为p x=""
帝国CMS在首页列表页模板调用内容页下载地址的