如何生成 Server API 请求头中的 X-Request-ID 字段?

我们建议在向融云发送的 Server API 请求头中携带 X-Request-ID 字段,帮助融云更高效地排查问题。

融云的 Server SDK 已自动带上 X-Request-ID 字段,无需您额外生成。

如果您需要自行生成 X-Request-ID(长度最大 36 位),可以参考下方示例:

Java 示例


import java.util.UUID;

HttpURLConnection conn = getHttpURLConnection(config, uri);
conn.setRequestProperty("X-Request-ID", UUID.randomUUID().toString().replaceAll("\\-", ""));

PHP 示例

private function create_guid()
{
    $charid = strtoupper(md5(uniqid(mt_rand(), true)));
    $uuid = substr($charid, 0, 8)
        . substr($charid, 8, 4)
        . substr($charid, 12, 4)
        . substr($charid, 16, 4)
        . substr($charid, 20, 12);
    return strtolower($uuid);
}
$header = [
    'RC-App-Key:' . $appKey,
    'RC-Nonce:' . $nonce,
    'RC-Timestamp:' . $timeStamp,
    'RC-Signature:' . $sign,
    'X-Request-ID:' . $this->create_guid()
];

Go 示例

import  "github.com/google/uuid"
// getSignature 本地生成签名
// Signature (数据签名)计算方法:将系统分配的 App Secret、Nonce (随机数)、
// Timestamp (时间戳)三个字符串按先后顺序拼接成一个字符串并进行 SHA1 哈希计算。如果调用的数据签名验证失败,接口调用会返回 HTTP 状态码 401。
func (rc RongCloud) getSignature() (nonce, timestamp, signature string) {
	nonceInt := rand.Int()
	nonce = strconv.Itoa(nonceInt)
	timeInt64 := time.Now().Unix()
	timestamp = strconv.FormatInt(timeInt64, 10)
	h := sha1.New()
	_, _ = io.WriteString(h, rc.appSecret+nonce+timestamp)
	signature = fmt.Sprintf("%x", h.Sum(nil))
	return
}

// fillHeader 在 Http Header 增加API签名
func (rc RongCloud) fillHeader(req *httplib.BeegoHTTPRequest) string {
	requestId := uuid.New().String()
	nonce, timestamp, signature := rc.getSignature()
	req.Header("RC-App-Key", rc.appKey)
	req.Header("RC-Timestamp", timestamp)
	req.Header("RC-Nonce", nonce)
	req.Header("RC-Signature", signature)
	req.Header("Content-Type", "application/json")
	req.Header("User-Agent", USERAGENT)
	req.Header("RC-Request-Id", requestId)
	return requestId
}

:bulb: 请在每次请求中携带新生成的 X-Request-ID,并做好记录。

1 个赞