60 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			60 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| // Package http resolves names to network addresses using a http request
 | |
| package http
 | |
| 
 | |
| import (
 | |
| 	"encoding/json"
 | |
| 	"io/ioutil"
 | |
| 	"net/http"
 | |
| 	"net/url"
 | |
| 
 | |
| 	"github.com/micro/go-micro/network/resolver"
 | |
| )
 | |
| 
 | |
| type Resolver struct {
 | |
| 	// If not set, defaults to http
 | |
| 	Proto string
 | |
| 
 | |
| 	// Path sets the path to lookup. Defaults to /network
 | |
| 	Path string
 | |
| }
 | |
| 
 | |
| // Resolve assumes ID is a domain which can be converted to a http://name/network request
 | |
| func (r *Resolver) Resolve(name string) ([]*resolver.Record, error) {
 | |
| 	proto := "http"
 | |
| 	path := "/network"
 | |
| 
 | |
| 	if len(r.Proto) > 0 {
 | |
| 		proto = r.Proto
 | |
| 	}
 | |
| 
 | |
| 	if len(r.Path) > 0 {
 | |
| 		path = r.Path
 | |
| 	}
 | |
| 
 | |
| 	uri := &url.URL{
 | |
| 		Scheme: proto,
 | |
| 		Path:   path,
 | |
| 		Host:   name,
 | |
| 	}
 | |
| 
 | |
| 	rsp, err := http.Get(uri.String())
 | |
| 	if err != nil {
 | |
| 		return nil, err
 | |
| 	}
 | |
| 	defer rsp.Body.Close()
 | |
| 
 | |
| 	b, err := ioutil.ReadAll(rsp.Body)
 | |
| 	if err != nil {
 | |
| 		return nil, err
 | |
| 	}
 | |
| 
 | |
| 	// encoding format is assumed to be json
 | |
| 	var records []*resolver.Record
 | |
| 
 | |
| 	if err := json.Unmarshal(b, &records); err != nil {
 | |
| 		return nil, err
 | |
| 	}
 | |
| 
 | |
| 	return records, nil
 | |
| }
 |