golang调用接口,参数转义的三种方式

go语言中, 三种转义编码方式,防止特殊字符造成的bug

func (s *service) DemoNFSCheckfile(ctx context.Context, siteID string, req *ReqDemoCheckFile) (ResCheckFile, error) {
	res := ResCheckFile{}
	bf := bytes.NewBuffer([]byte{})
	jsonEncoder := json.NewEncoder(bf)
	jsonEncoder.SetEscapeHTML(false)
	err := jsonEncoder.Encode(req)
	body := bf.String()
	if err != nil {
		logger.Errorf("Marshal ReqCheckFile failed: %v", err)
		return res, errors.SerializeRequestBody(err)
	}
	url := fmt.Sprintf("/service/sites/%s/vms/action/parsedescriptor", siteID)
	resp, err := s.client.Post(ctx, url, []byte(body))
	if err != nil {
		logger.Errorf("Post %s failed, body: %s, error: %v", url, body, err)
		return res, errors.DefaultSendRequest(err)
	}
	if resp.Failed() {
		logger.Errorf("Post %s, ErrorCode: %s, ErrorDes: %s", url, resp.ErrorCode, resp.ErrorDescription)
		return res, errors.UnexpectedResponseWithCode(resp.Status, resp.ErrorCode, resp.ErrorDescription)
	}
	err = json.Unmarshal(resp.Body, &res)
	if err != nil {
		logger.Errorf("Post %s, response body: %s, unresolved error: %v", url, body, err)
		return res, errors.DeserializeResponseBody(err)
	}
	return res, nil
}

2

// ListPCIs ...
// @Description PCI列表(独立PCI设备列表)
func (s *service) ListPCIs(ctx context.Context, siteID string, req *ReqPCIsQueryList) (ResListPCIWithHost, error) {
	var res ResListPCIWithHost

	url := fmt.Sprintf("/service/sites/%s/pcis", siteID)
	value, err := query.Values(req)
	if err != nil {
		logger.Errorf("list ListPCIs encode query values error,%v", err)
		return res, err
	}
	rowQuery := value.Encode()
	if rowQuery != "" {
		url = url + "?" + rowQuery
	}
	resp, err := s.client.Get(ctx, url)
	if err != nil {
		logger.Errorf("Get %s failed, error: %v", url, err)
		return res, errors.SendRequest("List PCIs", err)
	}
	err = json.Unmarshal(resp.Body, &res)
	if err != nil {
		logger.Errorf("Get %s, response body: %s, unresolved error: %v", url, resp.Body, err)
		return res, errors.UnexpectedResponseWithCode(resp.Status, resp.ErrorCode, resp.ErrorDescription)
	}
	return res, nil
}

3

func (s *service) GetVMsBySnapchatPolicyIsBinding(ctx context.Context, siteID string, queryMap map[string]string,
	limit, offset int) (ResVMsSnapshotPolicyPage, error) {
	res := ResVMsSnapshotPolicyPage{}

	reqURL := fmt.Sprintf(
		"/service/sites/%s/policy/querybypage/vms?queryType=%s&policyName=%s&vmName=%s&limit=%d&offset=%d",
		siteID, url.QueryEscape(queryMap["queryType"]), url.QueryEscape(queryMap["policyName"]),
		url.QueryEscape(queryMap["vmName"]), limit, offset)
	if queryMap["policyId"] != "" {
		reqURL = reqURL + fmt.Sprintf("&policyId=%s", url.QueryEscape(queryMap["policyId"]))
	}
	resp, err := s.client.Get(ctx, reqURL)
	if err != nil {
		logger.Errorf("Get %s failed, error: %v", reqURL, err)
		return res, errors.DefaultSendRequest(err)
	}
	if resp.Failed() {
		logger.Errorf("Get %s, response body: %s, unresolved error: %v", reqURL, resp.Body, err)
		return res, errors.UnexpectedResponseWithCode(resp.Status, resp.ErrorCode, resp.ErrorDescription)
	}
	err = json.Unmarshal(resp.Body, &res)
	if err != nil {
		logger.Errorf("unmarshal json failed %v", err)
		return res, errors.DeserializeResponseBody(err)
	}
	return res, nil
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值