MCPcopy Create free account
hub / github.com/PuerkitoBio/fetchbot / doRequest

Method doRequest

fetch.go:473–525  ·  view source on GitHub ↗

Prepare and execute the request for this Command.

(cmd Command)

Source from the content-addressed store, hash-verified

471
472// Prepare and execute the request for this Command.
473func (f *Fetcher) doRequest(cmd Command) (*http.Response, error) {
474 req, err := http.NewRequest(cmd.Method(), cmd.URL().String(), nil)
475 if err != nil {
476 return nil, err
477 }
478 // If the Command implements some other recognized interfaces, set
479 // the request accordingly (see cmd.go for the list of interfaces).
480 // First, the Header values.
481 if hd, ok := cmd.(HeaderProvider); ok {
482 for k, v := range hd.Header() {
483 req.Header[k] = v
484 }
485 }
486 // BasicAuth has higher priority than an Authorization header set by
487 // a HeaderProvider.
488 if ba, ok := cmd.(BasicAuthProvider); ok {
489 req.SetBasicAuth(ba.BasicAuth())
490 }
491 // Cookies are added to the request, even if some cookies were set
492 // by a HeaderProvider.
493 if ck, ok := cmd.(CookiesProvider); ok {
494 for _, c := range ck.Cookies() {
495 req.AddCookie(c)
496 }
497 }
498 // For the body of the request, ReaderProvider has higher priority
499 // than ValuesProvider.
500 if rd, ok := cmd.(ReaderProvider); ok {
501 rdr := rd.Reader()
502 rc, ok := rdr.(io.ReadCloser)
503 if !ok {
504 rc = ioutil.NopCloser(rdr)
505 }
506 req.Body = rc
507 } else if val, ok := cmd.(ValuesProvider); ok {
508 v := val.Values()
509 req.Body = ioutil.NopCloser(strings.NewReader(v.Encode()))
510 if req.Header.Get("Content-Type") == "" {
511 req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
512 }
513 }
514 // If there was no User-Agent implicitly set by the HeaderProvider,
515 // set it to the default value.
516 if req.Header.Get("User-Agent") == "" {
517 req.Header.Set("User-Agent", f.UserAgent)
518 }
519 // Do the request.
520 res, err := f.HttpClient.Do(req)
521 if err != nil {
522 return nil, err
523 }
524 return res, nil
525}

Callers 2

processChanMethod · 0.95
getRobotAgentMethod · 0.95

Calls 8

MethodMethod · 0.65
URLMethod · 0.65
HeaderMethod · 0.65
BasicAuthMethod · 0.65
CookiesMethod · 0.65
ReaderMethod · 0.65
ValuesMethod · 0.65
DoMethod · 0.65

Tested by

no test coverage detected