httpclient.go 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. package main
  2. import (
  3. "bytes"
  4. "io/ioutil"
  5. "log"
  6. "net/http"
  7. gateway "github.com/rpcxio/rpcx-gateway"
  8. "github.com/smallnest/rpcx/codec"
  9. )
  10. type Args struct {
  11. A int
  12. B int
  13. }
  14. type Reply struct {
  15. C int
  16. }
  17. func main() {
  18. cc := &codec.MsgpackCodec{}
  19. args := &Args{
  20. A: 10,
  21. B: 20,
  22. }
  23. data, _ := cc.Encode(args)
  24. req, err := http.NewRequest("POST", "http://127.0.0.1:9981/", bytes.NewReader(data))
  25. if err != nil {
  26. log.Fatal("failed to create request: ", err)
  27. return
  28. }
  29. h := req.Header
  30. // h.Set(gateway.XMessageID, "10000")
  31. // h.Set(gateway.XMessageType, "0")
  32. h.Set(gateway.XSerializeType, "3")
  33. h.Set(gateway.XServicePath, "Arith")
  34. h.Set(gateway.XServiceMethod, "Mul")
  35. res, err := http.DefaultClient.Do(req)
  36. if err != nil {
  37. log.Fatal("failed to call: ", err)
  38. }
  39. defer res.Body.Close()
  40. // handle http response
  41. replyData, err := ioutil.ReadAll(res.Body)
  42. if err != nil {
  43. log.Fatal("failed to read response: ", err)
  44. }
  45. reply := &Reply{}
  46. err = cc.Decode(replyData, reply)
  47. if err != nil {
  48. log.Fatal("failed to decode reply: ", err)
  49. }
  50. log.Printf("%d * %d = %d", args.A, args.B, reply.C)
  51. }