...

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

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

     1  package playwright
     2  
     3  import (
     4  	"encoding/base64"
     5  	"encoding/json"
     6  )
     7  
     8  // RequestFailure represents a request failure
     9  type RequestFailure struct {
    10  	ErrorText string
    11  }
    12  
    13  // ResourceTiming represents the resource timing
    14  type ResourceTiming struct {
    15  	StartTime             float64
    16  	DomainLookupStart     float64
    17  	DomainLookupEnd       float64
    18  	ConnectStart          float64
    19  	SecureConnectionStart float64
    20  	ConnectEnd            float64
    21  	RequestStart          float64
    22  	ResponseStart         float64
    23  	ResponseEnd           float64
    24  }
    25  
    26  type requestImpl struct {
    27  	channelOwner
    28  	timing             *ResourceTiming
    29  	provisionalHeaders *rawHeaders
    30  	allHeaders         *rawHeaders
    31  	redirectedFrom     Request
    32  	redirectedTo       Request
    33  	failureText        string
    34  }
    35  
    36  func (r *requestImpl) URL() string {
    37  	return r.initializer["url"].(string)
    38  }
    39  
    40  func (r *requestImpl) ResourceType() string {
    41  	return r.initializer["resourceType"].(string)
    42  }
    43  
    44  func (r *requestImpl) Method() string {
    45  	return r.initializer["method"].(string)
    46  }
    47  
    48  func (r *requestImpl) PostData() (string, error) {
    49  	body, err := r.PostDataBuffer()
    50  	if err != nil {
    51  		return "", err
    52  	}
    53  	return string(body), err
    54  }
    55  
    56  func (r *requestImpl) PostDataJSON(v interface{}) error {
    57  	body, err := r.PostDataBuffer()
    58  	if err != nil {
    59  		return err
    60  	}
    61  	return json.Unmarshal(body, v)
    62  }
    63  
    64  func (r *requestImpl) PostDataBuffer() ([]byte, error) {
    65  	if _, ok := r.initializer["postData"]; !ok {
    66  		return nil, nil
    67  	}
    68  	return base64.StdEncoding.DecodeString(r.initializer["postData"].(string))
    69  }
    70  
    71  func (r *requestImpl) Headers() map[string]string {
    72  	return r.provisionalHeaders.Headers()
    73  }
    74  
    75  func (r *requestImpl) Response() (Response, error) {
    76  	channel, err := r.channel.Send("response")
    77  	if err != nil {
    78  		return nil, err
    79  	}
    80  	channelOwner := fromNullableChannel(channel)
    81  	if channelOwner == nil {
    82  		return nil, nil
    83  	}
    84  	return channelOwner.(*responseImpl), nil
    85  }
    86  
    87  func (r *requestImpl) Frame() Frame {
    88  	return fromChannel(r.initializer["frame"]).(*frameImpl)
    89  }
    90  
    91  func (r *requestImpl) IsNavigationRequest() bool {
    92  	return r.initializer["isNavigationRequest"].(bool)
    93  }
    94  
    95  func (r *requestImpl) RedirectedFrom() Request {
    96  	return r.redirectedFrom
    97  }
    98  
    99  func (r *requestImpl) RedirectedTo() Request {
   100  	return r.redirectedTo
   101  }
   102  
   103  func (r *requestImpl) Failure() *RequestFailure {
   104  	if r.failureText == "" {
   105  		return nil
   106  	}
   107  	return &RequestFailure{
   108  		ErrorText: r.failureText,
   109  	}
   110  }
   111  
   112  func (r *requestImpl) Timing() *ResourceTiming {
   113  	return r.timing
   114  }
   115  func (r *requestImpl) AllHeaders() (map[string]string, error) {
   116  	headers, err := r.ActualHeaders()
   117  	if err != nil {
   118  		return nil, err
   119  	}
   120  	return headers.Headers(), nil
   121  }
   122  func (r *requestImpl) HeadersArray() (HeadersArray, error) {
   123  	headers, err := r.ActualHeaders()
   124  	if err != nil {
   125  		return nil, err
   126  	}
   127  	return headers.HeadersArray(), nil
   128  }
   129  func (r *requestImpl) HeaderValue(name string) (string, error) {
   130  	headers, err := r.ActualHeaders()
   131  	if err != nil {
   132  		return "", err
   133  	}
   134  	return headers.Get(name), err
   135  }
   136  func (r *requestImpl) HeaderValues(name string) ([]string, error) {
   137  	headers, err := r.ActualHeaders()
   138  	if err != nil {
   139  		return []string{}, err
   140  	}
   141  	return headers.GetAll(name), err
   142  }
   143  func (r *requestImpl) ActualHeaders() (*rawHeaders, error) {
   144  	if r.allHeaders == nil {
   145  		response, err := r.Response()
   146  		if err != nil {
   147  			return nil, err
   148  		}
   149  		if response == nil {
   150  			return r.provisionalHeaders, nil
   151  		}
   152  		headers, err := r.channel.Send("rawRequestHeaders")
   153  		if err != nil {
   154  			return nil, err
   155  		}
   156  		r.allHeaders = newRawHeaders(headers)
   157  	}
   158  	return r.allHeaders, nil
   159  }
   160  
   161  func (r *requestImpl) Sizes() (*RequestSizesResult, error) {
   162  	response, err := r.Response()
   163  	if err != nil {
   164  		return nil, err
   165  	}
   166  	sizes, err := response.(*responseImpl).channel.Send("sizes")
   167  	if err != nil {
   168  		return nil, err
   169  	}
   170  	result := &RequestSizesResult{}
   171  	remapMapToStruct(sizes, result)
   172  	return result, nil
   173  }
   174  
   175  func newRequest(parent *channelOwner, objectType string, guid string, initializer map[string]interface{}) *requestImpl {
   176  	req := &requestImpl{}
   177  	req.createChannelOwner(req, parent, objectType, guid, initializer)
   178  	redirectedFrom := fromNullableChannel(initializer["redirectedFrom"])
   179  	if redirectedFrom != nil {
   180  		req.redirectedFrom = redirectedFrom.(*requestImpl)
   181  	}
   182  	if req.redirectedFrom != nil {
   183  		req.redirectedFrom.(*requestImpl).redirectedTo = req
   184  	}
   185  	req.timing = &ResourceTiming{
   186  		StartTime:             0,
   187  		DomainLookupStart:     -1,
   188  		DomainLookupEnd:       -1,
   189  		ConnectStart:          -1,
   190  		SecureConnectionStart: -1,
   191  		ConnectEnd:            -1,
   192  		RequestStart:          -1,
   193  		ResponseStart:         -1,
   194  		ResponseEnd:           -1,
   195  	}
   196  	req.provisionalHeaders = newRawHeaders(req.initializer["headers"])
   197  	return req
   198  }
   199  

View as plain text