Web 使用超文本传输协议(Hypertext Transfer Protocol,HTTP)通信,通常用 web 浏览器,但是,出于某些原因,也可能想用脚本或程序中发出 web 请求,例如,通过 RSS 或 Atom feeds 收集站点内容。
生成 HTTP 请求,需要用 System.Net.WebRequest 类的静态方法 Create。它创建 WebRequest 对象,表示对统一资源定位器(URL,用于唯一标识网络上资源的地址)的请求,URL 被传递给 Create 方法;然后,使用 GetResponse 方法获得服务器对这个请求的响应,用 System.Net.WebResponse 类表示。
下面的例子(清单 11-3)演示了调用 BBC 站点上的 RSS。这个例子的核心是函数 getUrlAsXml,它检索来自 URL 的数据,并把数据加载到 XmlDocument;其余部分是对数据的后期处理,即,在控制台上显示每一项的标题,用户可以选择某一项来显示。
清单 11-3. 使用 HTTP
open System
open System.Diagnostics
open System.Net
open System.Xml
///makes a http request to the given url
let getUrlAsXml (url: string) =
let request = WebRequest.Create(url)
let response = request.GetResponse()
let stream = response.GetResponseStream()
let xml = new XmlDocument()
xml.Load(stream)
xml
///the url we interested in
let url = "http://feeds.bbci.co.uk/news/rss.xml"
///main application function
let main() =
// read the rss fead
let xml = getUrlAsXml url
// write out the tiles of all the news items
let nodes = xml.SelectNodes("/rss/channel/item/title")
for i in 0 .. (nodes.Count - 1) do
printf "%i.%s\r\n" (i+ 1) (nodes.[i].InnerText)
// read the number the user wants from the console
let item = int(Console.ReadLine())
// find the new url
let newUrl =
let xpath = sprintf "/rss/channel/item[%i]/link" item
let node = xml.SelectSingleNode(xpath)
node.InnerText
// start the url using the shell, this automaticall opens
// the default browser
let procStart = new ProcessStartInfo(UseShellExecute =true,
FileName= newUrl)
let proc = new Process(StartInfo = procStart)
proc.Start() |> ignore
do main()
[
1、需要引用 System.Xml.dll
2、url 要改成:
let url = "http://feeds.bbci.co.uk/news/rss.xml"
]
这个结果是写作时的,实际运行会有变化:
1. Five-step check for nano safety
2. Neanderthal DNA secrets unlocked
3. Stem cells 'treat muscle disease'
4. World Cup site threat to swallows
5. Clues to pandemic bird flu found
6. Mice star as Olympic food tasters
7. Climate bill sets carbon target
8. Physics promises wireless power
9. Heart 'can carry out own repairs'
10. Average European 'is overweight'
11. Contact lost with Mars spacecraft
12. Air guitar T-shirt rocks for real
13. Chocolate 'cuts blood clot risk'
14. Case for trawl ban 'overwhelming'
15. UN chief issues climate warning
16. Japanese begin annual whale hunt
17. Roman ship thrills archaeologists
18. Study hopeful for world's forests