@@ -25,7 +25,7 @@ import (
2525
2626const (
2727 // Version current go sdk version
28- Version = "0.7.50 "
28+ Version = "0.7.52 "
2929 UserAgent = "cos-go-sdk-v5/" + Version
3030 contentTypeXML = "application/xml"
3131 defaultServiceBaseURL = "http://service.cos.myqcloud.com"
@@ -40,10 +40,10 @@ var (
4040 )
4141
4242 // {<http://>|<https://>}{bucketname-appid}.{cos|cos-internal|cos-website|ci}.{region}.{myqcloud.com/tencentcos.cn}{/}
43- hostSuffix = regexp .MustCompile (`^.*((cos|cos-internal|cos-website|ci)\.[a-z-1]+|file)\.(myqcloud\.com|tencentcos\.cn).*$` )
44- hostPrefix = regexp .MustCompile (`^(http://|https://){0,1}([a-z0-9-]+-[0-9]+\.){0,1}((cos|cos-internal|cos-website|ci)\.[a-z-1]+|file)\.(myqcloud\.com|tencentcos\.cn).*$` )
43+ hostSuffix = regexp .MustCompile (`^.*((cos|cos-internal|cos-website|ci)\.[a-z-1]+|file)\.(myqcloud\.com|tencentcos\.cn).*$` )
44+ hostPrefix = regexp .MustCompile (`^(http://|https://){0,1}([a-z0-9-]+-[0-9]+\.){0,1}((cos|cos-internal|cos-website|ci)\.[a-z-1]+|file)\.(myqcloud\.com|tencentcos\.cn).*$` )
4545 metaInsightHostPrefix = regexp .MustCompile (`^(http://|https://){0,1}([0-9]+\.){1}((cos|cos-internal|cos-website|ci)\.[a-z-1]+|file)\.(myqcloud\.com|tencentcos\.cn).*$` )
46- invalidBucketErr = fmt .Errorf ("invalid bucket format, please check your cos.BaseURL" )
46+ invalidBucketErr = fmt .Errorf ("invalid bucket format, please check your cos.BaseURL" )
4747
4848 switchHost = regexp .MustCompile (`([a-z0-9-]+-[0-9]+\.)(cos\.[a-z-1]+)\.(myqcloud\.com)(:[0-9]+){0,1}$` )
4949 accelerateDomainSuffix = "accelerate.myqcloud.com"
@@ -121,11 +121,11 @@ type Client struct {
121121
122122 common service
123123
124- Service * ServiceService
125- Bucket * BucketService
126- Object * ObjectService
127- Batch * BatchService
128- CI * CIService
124+ Service * ServiceService
125+ Bucket * BucketService
126+ Object * ObjectService
127+ Batch * BatchService
128+ CI * CIService
129129 MetaInsight * MetaInsightService
130130
131131 Conf * Config
@@ -217,7 +217,7 @@ func (c *Client) GetCredential() *Credential {
217217 return nil
218218}
219219
220- func (c * Client ) newRequest (ctx context.Context , baseURL * url.URL , uri , method string , body interface {}, optQuery interface {}, optHeader interface {}) (req * http.Request , err error ) {
220+ func (c * Client ) newRequest (ctx context.Context , baseURL * url.URL , uri , method string , body interface {}, optQuery interface {}, optHeader interface {}, isRetry bool ) (req * http.Request , err error ) {
221221 if ! checkURL (baseURL ) {
222222 host := baseURL .String ()
223223 if c .BaseURL .MetaInsightURL != baseURL || ! metaInsightHostPrefix .MatchString (host ) {
@@ -273,6 +273,9 @@ func (c *Client) newRequest(ctx context.Context, baseURL *url.URL, uri, method s
273273 if req .Header .Get ("Content-Type" ) == "" && contentType != "" {
274274 req .Header .Set ("Content-Type" , contentType )
275275 }
276+ if isRetry {
277+ req .Header .Set ("X-Cos-Sdk-Retry" , "true" )
278+ }
276279 if c .Host != "" {
277280 req .Host = c .Host
278281 }
@@ -370,6 +373,8 @@ type sendOptions struct {
370373 // 是否禁用自动调用 resp.Body.Close()
371374 // 自动调用 Close() 是为了能够重用连接
372375 disableCloseBody bool
376+ // 是否重试
377+ isRetry bool
373378}
374379
375380func toSwitchHost (oldURL * url.URL ) * url.URL {
@@ -428,6 +433,7 @@ func (c *Client) doRetry(ctx context.Context, opt *sendOptions) (resp *Response,
428433 if err != nil {
429434 retryErr .Add (err )
430435 }
436+ opt .isRetry = nr > 0
431437 resp , err = c .send (ctx , opt )
432438 opt .baseURL , retrieable = c .CheckRetrieable (opt .baseURL , resp , err , nr >= count - 2 )
433439 if retrieable {
@@ -449,7 +455,7 @@ func (c *Client) doRetry(ctx context.Context, opt *sendOptions) (resp *Response,
449455}
450456
451457func (c * Client ) send (ctx context.Context , opt * sendOptions ) (resp * Response , err error ) {
452- req , err := c .newRequest (ctx , opt .baseURL , opt .uri , opt .method , opt .body , opt .optQuery , opt .optHeader )
458+ req , err := c .newRequest (ctx , opt .baseURL , opt .uri , opt .method , opt .body , opt .optQuery , opt .optHeader , opt . isRetry )
453459 if err != nil {
454460 return
455461 }
0 commit comments