2011-03-28 100 views
3

以下代码发送GET请求。这让我发疯。如何在F#中创建HTTP POST请求?

let postDocRaw (url:string) (data: string) : string = 
     let data' : byte[] = System.Text.Encoding.ASCII.GetBytes(data); 

     let request = WebRequest.Create(url) 
     request.Method  <- "POST" 
     request.ContentType <- "application/x-www-form-urlencoded" 
     request.ContentLength <- (int64) data'.Length 

     use wstream = request.GetRequestStream() 
     wstream.Write(data',0, (data'.Length)) 
     wstream.Flush() 
     wstream.Close() 
(* 
     use writer = new StreamWriter (wstream) 
     writer.Write(data') 
     writer.Flush() 
     writer.Close() 
*) 

     let response = request.GetResponse() 
     use reader  = new StreamReader(response.GetResponseStream()) 
     let output = reader.ReadToEnd() 

     reader.Close() 
     response.Close() 
     request.Abort() 

     output 

此刻我不确定任何人曾经使用过F#发送HTTP POST。有没有人看过有关此文件?

回答

2

似乎为我工作的罚款。例如(posttestserver.com的确存在):

printfn "response: %A" (postDocRaw "http://posttestserver.com/post.php" "hello=data") 
Console.ReadLine() |> ignore 

结果:

response: " 
Successfully dumped 1 post variables.Post body was 0 chars long. 
" 

也许你正在以不同的方式使用它吗?

+0

嗯,我不是说这是一个诡计问题。我不确定我是否明白发生了什么问题,但通过改变我称之为的方式,我已经完成了一些工作......谢谢! – 2011-03-28 04:16:36

+0

如何在上面的例子中设置Accept头? – App2015 2018-03-08 14:34:57