希曼日记

metadata

服务端grpc读取http请求的metadata

package gapi

import (
	"golang.org/x/net/context"
	"google.golang.org/grpc/metadata"
	"log"
	"simple_bank/constants"
)

type Metadata struct {
	UserAgent string
	ClientIP  string
}

func (s *Server) extractMetadata(ctx context.Context) *Metadata {
	mtdt := &Metadata{}

	md, ok := metadata.FromIncomingContext(ctx)
	if !ok {
		log.Printf("Failed to extract metadata from context")
	}

	log.Printf("metadata from incoming context: %+v\n", md)

	if userAgents := md.Get(constants.GRPCGATEWAYUSERAGENT); len(userAgents) > 0 {
		mtdt.UserAgent = userAgents[0]
	}
	if clientIPs := md.Get(constants.XFORWARDEDFOR); len(clientIPs) > 0 {
		mtdt.ClientIP = clientIPs[0]
	}
	return mtdt
}