Http.fs icon indicating copy to clipboard operation
Http.fs copied to clipboard

README corrections

Open rm2 opened this issue 7 years ago • 0 comments

The README currently states:

2 - The Http response (or just the response code/body) is retrieved using one of the following:

job {
  use! response = getResponse request // disposed at the end of async, don't
                                      // fetch outside async body
  // the above doesn't download the response, so you'll have to do that:
  let! bodyStr = Response.readBodyAsString response
  // OR:
  //let! bodyBs = Response.readBodyAsBytes

  // remember HttpFs doesn't buffer the stream (how would we know if we're
  // downloading 3GiB?), so once you use one of the above methods, you can't do it
  // again, but have to buffer/stash it yourself somewhere.
  return bodyStr
}

IMO it should really say:

2 - The Http response (or just the response code/body) is retrieved using one of the following:

job { use! response = getResponse request // disposed at the end of Hopac job, don't // fetch outside Hopac job body // while the above does download the full response, it doesn't give you access to the body content. You'll have to do this: let! bodyStr = Response.readBodyAsString response // OR: //let! bodyBs = Response.readBodyAsBytes

// remember HttpFs doesn't buffer the stream (how would we know if we're // downloading 3GiB?), so once you use one of the above methods, you can't do it // again, but have to buffer/stash it yourself somewhere. return bodyStr }

as demonstrated by issue #158, wherein I got the full response even though I didn't think I was asking for it. And perhaps even say (the more examples of using Hopac with HttpFs in various situations the better), to be explicit:

If for some reason, you only want to get the headers, instead do:

let statusCode, contentType, headers =
  Hopac.Hopac.job {
    use! response = HttpFs.Client.getEventSourceResponse request
    let statusCode = response.statusCode
    let contentType = response.headers.[HttpFs.Client.ResponseHeader.ContentTypeResponse]
   return statusCode, contentType, response.headers
  } |> Hopac.Hopac.run

rm2 avatar Feb 13 '19 00:02 rm2