2011-09-13 10 views
1

私の目標は、Webブラウザーコントロールからクッキーを取得することです。F#/ C#でWebブラウザーからクッキーを取得する

let getCookie(url:string) = 
    let form = new Form(Text="Internet Navigator") 
    form.AutoScaleDimensions <- new System.Drawing.SizeF(6.0F, 13.0F) 
    form.AutoScaleMode <- System.Windows.Forms.AutoScaleMode.Font 
    form.ClientSize <- new System.Drawing.Size(849, 593) 
    form.ResumeLayout(false) 
    form.PerformLayout() 

    let wb = new WebBrowser() 
    wb.Visible<-true 
    wb.AutoSize<-true 
    wb.Size <- new System.Drawing.Size(804, 800) 
    form.Controls.Add(wb) 
    form.Show() 


    let cookie = ref "" 

    wb.Navigate(url) 
    wb.DocumentCompleted 
    |> Event.map(fun _ -> cookie:= wb.Document.Cookie) 
    !cookie 

は理想的Event.map内からクッキーの値を返す方法がある(またはそのような何か):私は参照してこれを実行しようとしましたが、Event.mapは私が値を返すことはできません。 ?

答えて

3

更新:むしろ、コールバック

を使用するよりも機能からクッキーの値を返すために
let getCookie(url:string) = 
     let form = new Form(Text="Internet Navigator") 
     form.AutoScaleDimensions <- new System.Drawing.SizeF(6.0F, 13.0F) 
     form.AutoScaleMode <- System.Windows.Forms.AutoScaleMode.Font 
     form.ClientSize <- new System.Drawing.Size(849, 593) 
     form.ResumeLayout(false) 
     form.PerformLayout() 

     let wb = new WebBrowser() 
     wb.Visible<-true 
     wb.AutoSize<-true 
     wb.Size <- new System.Drawing.Size(804, 800) 
     form.Controls.Add(wb) 
     wb.DocumentCompleted |> Event.add (fun _ -> form.Close()) 
     wb.Navigate(url) 
     form.ShowDialog() |> ignore 
     wb.Document.Cookie 

[<STAThreadAttribute>] 
do 
    let cookie = getCookie "http://www.google.com" 
    Console.Read() |> ignore 
ご返信用
+0

おかげで、印刷は完璧に動作しますが、それは値を取得しようとしているの問題を解決しません。私の例ではlet temp = ref ""と同じですが、fres = temp:= resとすると、コードは本当に速く実行され、refは常に ""、おそらくちょっと後のtemp正しいクッキー値になります – jlezard

+0

関数からクッキー値を返すように答えを更新しました – Ankur

関連する問題