...

Source file src/github.com/playwright-community/playwright-go/response.go

Documentation: github.com/playwright-community/playwright-go

     1  package playwright
     2  
     3  import (
     4  	"encoding/base64"
     5  	"encoding/json"
     6  )
     7  
     8  type responseImpl struct {
     9  	channelOwner
    10  	request            *requestImpl
    11  	provisionalHeaders *rawHeaders
    12  	rawHeaders         *rawHeaders
    13  	finished           chan bool
    14  }
    15  
    16  func (r *responseImpl) URL() string {
    17  	return r.initializer["url"].(string)
    18  }
    19  
    20  func (r *responseImpl) Ok() bool {
    21  	return r.Status() == 0 || (r.Status() >= 200 && r.Status() <= 299)
    22  }
    23  
    24  func (r *responseImpl) Status() int {
    25  	return int(r.initializer["status"].(float64))
    26  }
    27  
    28  func (r *responseImpl) StatusText() string {
    29  	return r.initializer["statusText"].(string)
    30  }
    31  
    32  func (r *responseImpl) Headers() map[string]string {
    33  	return r.provisionalHeaders.Headers()
    34  }
    35  
    36  func (r *responseImpl) Finished() {
    37  	<-r.finished
    38  }
    39  
    40  func (r *responseImpl) Body() ([]byte, error) {
    41  	b64Body, err := r.channel.Send("body")
    42  	if err != nil {
    43  		return nil, err
    44  	}
    45  	return base64.StdEncoding.DecodeString(b64Body.(string))
    46  }
    47  
    48  func (r *responseImpl) Text() (string, error) {
    49  	body, err := r.Body()
    50  	if err != nil {
    51  		return "", err
    52  	}
    53  	return string(body), nil
    54  }
    55  
    56  func (r *responseImpl) JSON(v interface{}) error {
    57  	body, err := r.Body()
    58  	if err != nil {
    59  		return err
    60  	}
    61  	return json.Unmarshal(body, v)
    62  }
    63  
    64  func (r *responseImpl) Request() Request {
    65  	return r.request
    66  }
    67  
    68  func (r *responseImpl) Frame() Frame {
    69  	return r.request.Frame()
    70  }
    71  
    72  func (r *responseImpl) AllHeaders() (map[string]string, error) {
    73  	headers, err := r.ActualHeaders()
    74  	if err != nil {
    75  		return nil, err
    76  	}
    77  	return headers.Headers(), nil
    78  }
    79  func (r *responseImpl) HeadersArray() (HeadersArray, error) {
    80  	headers, err := r.ActualHeaders()
    81  	if err != nil {
    82  		return nil, err
    83  	}
    84  	return headers.HeadersArray(), nil
    85  }
    86  func (r *responseImpl) HeaderValue(name string) (string, error) {
    87  	headers, err := r.ActualHeaders()
    88  	if err != nil {
    89  		return "", err
    90  	}
    91  	return headers.Get(name), err
    92  }
    93  func (r *responseImpl) HeaderValues(name string) ([]string, error) {
    94  	headers, err := r.ActualHeaders()
    95  	if err != nil {
    96  		return []string{}, err
    97  	}
    98  	return headers.GetAll(name), err
    99  }
   100  func (r *responseImpl) ActualHeaders() (*rawHeaders, error) {
   101  	if r.rawHeaders == nil {
   102  		headers, err := r.channel.Send("rawResponseHeaders")
   103  		if err != nil {
   104  			return nil, err
   105  		}
   106  		r.rawHeaders = newRawHeaders(headers)
   107  	}
   108  	return r.rawHeaders, nil
   109  }
   110  
   111  func (r *responseImpl) SecurityDetails() (*ResponseSecurityDetailsResult, error) {
   112  	details, err := r.channel.Send("securityDetails")
   113  	if err != nil {
   114  		return nil, err
   115  	}
   116  	result := &ResponseSecurityDetailsResult{}
   117  	remapMapToStruct(details.(map[string]interface{}), result)
   118  	return result, nil
   119  }
   120  
   121  func (r *responseImpl) ServerAddr() (*ResponseServerAddrResult, error) {
   122  	addr, err := r.channel.Send("serverAddr")
   123  	if err != nil {
   124  		return nil, err
   125  	}
   126  	result := &ResponseServerAddrResult{}
   127  	remapMapToStruct(addr, result)
   128  	return result, nil
   129  }
   130  
   131  func newResponse(parent *channelOwner, objectType string, guid string, initializer map[string]interface{}) *responseImpl {
   132  	resp := &responseImpl{}
   133  	resp.createChannelOwner(resp, parent, objectType, guid, initializer)
   134  	timing := resp.initializer["timing"].(map[string]interface{})
   135  	resp.request = fromChannel(resp.initializer["request"]).(*requestImpl)
   136  	resp.request.timing = &ResourceTiming{
   137  		StartTime:             timing["startTime"].(float64),
   138  		DomainLookupStart:     timing["domainLookupStart"].(float64),
   139  		DomainLookupEnd:       timing["domainLookupEnd"].(float64),
   140  		ConnectStart:          timing["connectStart"].(float64),
   141  		SecureConnectionStart: timing["secureConnectionStart"].(float64),
   142  		ConnectEnd:            timing["connectEnd"].(float64),
   143  		RequestStart:          timing["requestStart"].(float64),
   144  		ResponseStart:         timing["responseStart"].(float64),
   145  	}
   146  	resp.provisionalHeaders = newRawHeaders(resp.initializer["headers"])
   147  	resp.finished = make(chan bool, 1)
   148  	return resp
   149  }
   150  

View as plain text