You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

aksk_sign.go 2.3 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. package utils
  2. import (
  3. "bytes"
  4. "crypto/tls"
  5. "fmt"
  6. "github.com/JCCE-nudt/apigw-go-sdk/core"
  7. "io"
  8. "mime/multipart"
  9. "net/http"
  10. )
  11. // SignClient AK/SK签名认证
  12. func SignClient(r *http.Request, writer *multipart.Writer) (*http.Client, error) {
  13. r.Header.Add("content-type", "application/json;charset=UTF-8")
  14. r.Header.Add("X-Project-Id", "d18190e28e3f45a281ef0b0696ec9d52")
  15. r.Header.Add("x-stage", "RELEASE")
  16. r.Header.Add("x-sdk-content-sha256", "UNSIGNED-PAYLOAD")
  17. r.Header.Set("Content-Type", writer.FormDataContentType())
  18. s := core.Signer{
  19. Key: "UNEHPHO4Z7YSNPKRXFE4",
  20. Secret: "JWXCE9qcYbc7RjpSRIWt4WgG3ZKF6Q4lPzkJReX9",
  21. }
  22. err := s.Sign(r)
  23. if err != nil {
  24. return nil, err
  25. }
  26. //设置client信任所有证书
  27. tr := &http.Transport{
  28. TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
  29. }
  30. client := &http.Client{
  31. Transport: tr,
  32. }
  33. return client, nil
  34. }
  35. func SendRequest(method, url string, file multipart.File, fileName string) (string, error) {
  36. /*body := &bytes.Buffer{}
  37. writer := multipart.NewWriter(body)*/
  38. // 创建一个新的缓冲区以写入multipart表单
  39. var body bytes.Buffer
  40. // 创建一个新的multipart writer
  41. writer := multipart.NewWriter(&body)
  42. // 创建一个用于写入文件的表单字段
  43. part, err := writer.CreateFormFile("file", fileName) // "file"是表单的字段名,第二个参数是文件名
  44. if err != nil {
  45. fmt.Println("Error creating form file:", err)
  46. }
  47. // 将文件的内容拷贝到multipart writer中
  48. _, err = io.Copy(part, file)
  49. if err != nil {
  50. fmt.Println("Error copying file data:", err)
  51. }
  52. err = writer.Close()
  53. if err != nil {
  54. fmt.Println("Error closing multipart writer:", err)
  55. }
  56. request, err := http.NewRequest(method, url, &body)
  57. if err != nil {
  58. fmt.Println("Error creating new request:", err)
  59. //return nil, err
  60. }
  61. signedR, err := SignClient(request, writer)
  62. if err != nil {
  63. fmt.Println("Error signing request:", err)
  64. //return nil, err
  65. }
  66. res, err := signedR.Do(request)
  67. if err != nil {
  68. fmt.Println("Error sending request:", err)
  69. return "", err
  70. }
  71. //defer res.Body.Close()
  72. Resbody, err := io.ReadAll(res.Body)
  73. if err != nil {
  74. fmt.Println("Error reading response body:", err)
  75. //return nil, err
  76. }
  77. return string(Resbody), nil
  78. }

PCM is positioned as Software stack over Cloud, aiming to build the standards and ecology of heterogeneous cloud collaboration for JCC in a non intrusive and autonomous peer-to-peer manner.