// Fetch is defined in simplestreams.DataSource. func (h *urlDataSource) Fetch(path string) (io.ReadCloser, string, error) { dataURL := urlJoin(h.baseURL, path) client := utils.GetHTTPClient(h.hostnameVerification) // dataURL can be http:// or file:// resp, err := client.Get(dataURL) if err != nil { logger.Debugf("Got error requesting %q: %v", dataURL, err) return nil, dataURL, errors.NotFoundf("invalid URL %q", dataURL) } if resp.StatusCode == http.StatusNotFound { return nil, dataURL, errors.NotFoundf("cannot find URL %q", dataURL) } if resp.StatusCode == http.StatusUnauthorized { return nil, dataURL, errors.Unauthorizedf("unauthorised access to URL %q", dataURL) } if resp.StatusCode != http.StatusOK { return nil, dataURL, fmt.Errorf("cannot access URL %q, %q", dataURL, resp.Status) } return resp.Body, dataURL, nil }
func (u *Upgrader) ensureTools(agentTools *coretools.Tools, hostnameVerification utils.SSLHostnameVerification) error { if _, err := agenttools.ReadTools(u.dataDir, agentTools.Version); err == nil { // Tools have already been downloaded return nil } logger.Infof("fetching tools from %q", agentTools.URL) client := utils.GetHTTPClient(hostnameVerification) resp, err := client.Get(agentTools.URL) if err != nil { return err } defer resp.Body.Close() if resp.StatusCode != http.StatusOK { return fmt.Errorf("bad HTTP response: %v", resp.Status) } err = agenttools.UnpackTools(u.dataDir, agentTools, resp.Body) if err != nil { return fmt.Errorf("cannot unpack tools: %v", err) } logger.Infof("unpacked tools %s to %s", agentTools.Version, u.dataDir) return nil }
func (s *httpSuite) TestNonValidatingClientGetter(c *gc.C) { client1 := utils.GetNonValidatingHTTPClient() client2 := utils.GetHTTPClient(utils.NoVerifySSLHostnames) c.Check(client1, gc.Equals, client2) }