From e9d0a172ee5d6bbde57a6967f93ab805b2fbb5c9 Mon Sep 17 00:00:00 2001 From: gazebo Date: Mon, 29 Oct 2018 19:26:06 +0800 Subject: [PATCH] - use post if url is too long for jdapi. --- platformapi/jdapi/jdapi.go | 29 +++++++++++++++++++++++------ 1 file changed, 23 insertions(+), 6 deletions(-) diff --git a/platformapi/jdapi/jdapi.go b/platformapi/jdapi/jdapi.go index 70072d24..e9f94d51 100644 --- a/platformapi/jdapi/jdapi.go +++ b/platformapi/jdapi/jdapi.go @@ -6,6 +6,7 @@ import ( "fmt" "net/http" "sort" + "strings" "git.rosy.net.cn/baseapi" @@ -137,21 +138,35 @@ func (a *API) AccessAPI(apiStr string, jdParams map[string]interface{}) (retVal if jdParams == nil { jdParams = make(map[string]interface{}, 0) } - jdParamStr, err := json.Marshal(jdParams) + jdParamBytes, err := json.Marshal(jdParams) if err != nil { baseapi.SugarLogger.Errorf("Error when marshal %v, error:%v", jdParams, err) return nil, err } - params["jd_param_json"] = string(jdParamStr) + jdParamStr := string(jdParamBytes) + userGet := true + if len(jdParamStr) > 12 { + userGet = false + } + params["jd_param_json"] = jdParamStr params["timestamp"] = utils.GetCurTimeStr() sign := a.signParams(params) params[signKey] = sign err = platformapi.AccessPlatformAPIWithRetry(a.client, func() *http.Request { - fullURL := utils.GenerateGetURL(prodURL, apiStr, params) - // baseapi.SugarLogger.Debug(fullURL) - request, _ := http.NewRequest(http.MethodGet, fullURL, nil) + var request *http.Request + if userGet { + fullURL := utils.GenerateGetURL(prodURL, apiStr, params) + // baseapi.SugarLogger.Debug(fullURL) + request, _ = http.NewRequest(http.MethodGet, fullURL, nil) + } else { + fullURL := prodURL + "/" + apiStr + // baseapi.SugarLogger.Debug(utils.Map2URLValues(params).Encode()) + request, _ = http.NewRequest(http.MethodPost, fullURL, strings.NewReader(utils.Map2URLValues(params).Encode())) + request.Header.Set("charset", "UTF-8") + request.Header.Set("Content-Type", "application/x-www-form-urlencoded") + } // request.Close = true //todo 为了性能考虑还是不要关闭 return request }, @@ -338,7 +353,9 @@ func (a *API) AccessAPIHavePage(apiStr string, jdParams map[string]interface{}, } func forceInnerCode2Str(innerCode interface{}) string { - if innerCodeStr, ok := innerCode.(string); ok { + if innerCode == nil { + return "0" + } else if innerCodeStr, ok := innerCode.(string); ok { return innerCodeStr } return fmt.Sprintf("%v", innerCode)