我正在尝试使用WorldBank API读取XML流。有问题的网址是http://api.worldbank.org/country?per_page=100
,现在在我的网络浏览器中运行正常并返回XML文档。
然而,这在FSI中不会很好用。该流基本上是一堆垃圾,根据XML文档和响应标头,内容的编码是UTF-8,我设置StreamReader使用该编码,但它看起来并不像帮助。
以下是代码:
let downloadUrl(url:string) =
async { let request = HttpWebRequest.Create(url)
use! response = request.AsyncGetResponse()
let stream = response.GetResponseStream()
use reader = new StreamReader(stream, Text.Encoding.UTF8)
return! Async.AwaitTask <| reader.ReadToEndAsync() }
答案 0 :(得分:0)
我想通了,显然返回的流是GZip压缩的,所以我不得不改变代码,所以它会使用自动解压缩..我应该提一下..这不是非常强大的代码HttpWebRequest.Create
除了HttpWebRequest
之外,我可以在模式匹配中使用类型检查来确定返回的类型,但是这可以用于我的目的,因为我知道我只会将它用于HttpWebRequests
。
let downloadUrl(url:string) =
async { let request = HttpWebRequest.Create(url) :?> HttpWebRequest
request.AutomaticDecompression <- DecompressionMethods.GZip
use! response = request.AsyncGetResponse()
let stream = response.GetResponseStream()
use reader = new StreamReader(stream, Text.Encoding.UTF8)
return! Async.AwaitTask <| reader.ReadToEndAsync() }