使用 HTTP Post
我们已经看过使用HTTP 协议检索数据的两种不同方法,下面,我们将学习如何使用上HTTP 进行更新。为了能够让客户端发送数据,HTTP协议提供了POST 动词,它把客户端发送数据作为 HTTP 请求体的一部分。
下一步是使用流行的社交网络工具推特进行状态更新,地址:http://twitter.com(见清单 11-5)。
清单 11-5 使用 HTTP POST 更新推特状态
open System
open System.Net
open System.Text
let postTweet username password tweet =
//create a token to authenticate
let(token: string) = username + ":" + password
letuser = Convert.ToBase64String(Encoding.UTF8.GetBytes(token))
//determine what we want to upload as a status
letbytes = Encoding.ASCII.GetBytes("status=" + tweet)
//connect with the update page
letrequest =
WebRequest.Create("http://twitter.com/statuses/update.xml",
Method = "POST",
ContentLength =Convert.ToInt64(bytes.Length),
ContentType ="application/x-www-form-urlencoded")
:?> HttpWebRequest
request.ServicePoint.Expect100Continue<- false
//set the authorisation levels
request.Headers.Add("Authorization","Basic " + user)
//set up the stream
usereqStream = request.GetRequestStream()
reqStream.Write(bytes,0, bytes.Length)
reqStream.Close()
postTweet "you" "xxx""Test tweet from F# interactive"
用 HTTP POST 数据,与检索数据没有术大的不同。主要的差别在于,当创建WebRequest 时,有几个不同的属性是必须配置的,比如,要设置属性Method、ContentLength 和 ContentType;要想真正让用户能够更新他的状态,还需要在 HTTP 头中加上身份认证的令牌(authentication token):
// set the authorisation levels
request.Headers.Add("Authorization","Basic " + user)
最后,需要把数据写入请求流,这很简单,与写数据流是一回事:
use reqStream = request.GetRequestStream()
reqStream.Write(bytes, 0, bytes.Length)
reqStream.Close()
可能这个示例最有意义的地方在于它能运行在 F# 交互中。如果你是一个推特粉,可以在不离开编程环境的情况下,更新你的推特状态。