static async connect({
    http,
    onProgress,
    corsProxy,
    service,
    url,
    auth,
    body,
    headers,
  }) {
    // We already have the "correct" auth value at this point, but
    // we need to strip out the username/password from the URL yet again.
    const urlAuth = extractAuthFromUrl(url)
    if (urlAuth) url = urlAuth.url

    if (corsProxy) url = corsProxify(corsProxy, url)

    headers['content-type'] = `application/x-${service}-request`
    headers.accept = `application/x-${service}-result`
    updateHeaders(headers, auth)

    const res = await http.request({
      onProgress,
      method: 'POST',
      url: `${url}/${service}`,
      body,
      headers,
    })
    if (res.statusCode !== 200) {
      const { response } = stringifyBody(res)
      throw new HttpError(res.statusCode, res.statusMessage, response)
    }
    return res
  }
@param {Object} args
@param {HttpClient} args.http
@param {ProgressCallback} [args.onProgress]
@param {string} [args.corsProxy]
@param {string} args.service
@param {string} args.url
@param {Object<string, string>} [args.headers]
@param {any} args.body
@param {any} args.auth