【问题标题】:How to log http requests in F#如何在 F# 中记录 http 请求
【发布时间】:2022-01-15 21:28:52
【问题描述】:

我有一个 F# 控制台应用程序 (.Net 5) 通过 FSharp.Data 发送 http 请求,但我还没有找到记录原始 http 请求的方法。我尝试使用 F# .Net 6 Web 应用程序模板并启用 HttpLogging,但这不会记录我在代码中执行的 http 请求。由于工作政策的原因,其他工具(如 fiddler 或 wireshark)不是一个选择。

有没有办法启用此类日志记录,例如在这个最小的示例控制台应用程序中?

open FSharp.Data

[<EntryPoint>]
let main argv =
    let html = Http.Request("http://tomasp.net")
    printfn "%s" (html.ToString())
    0

【问题讨论】:

    标签: logging f# httprequest f#-data


    【解决方案1】:

    您可以将自定义函数传递给 Http.Request,我认为传递具有记录有关请求的某些内容的副作用的函数是可以的。例如:

    open System.Net
    open FSharp.Data
    
    let requestHeaders =
        [
            "User-Agent", "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0"
            "Accept", "*/*"
        ]
    
    let requestCustomizeFunc =
        fun (request: HttpWebRequest) -> 
            printfn "Address: %O" request.Address
            printfn "Method: %O" request.Method
            printfn "Headers: %O" request.Headers
            request
    
    [<EntryPoint>]
    let main argv =
        let response = Http.Request ("http://tomasp.net", headers = requestHeaders, customizeHttpRequest = requestCustomizeFunc)
    
        response.StatusCode
        |> printfn "%O"
    
        0
    

    这又快又脏;如果您真的很想在 .NET 应用程序中记录网络级别发生的事情,您可能需要考虑利用内置的跟踪功能。

    https://docs.microsoft.com/en-us/dotnet/framework/network-programming/network-tracing

    【讨论】:

    • 我认为这对我的情况来说已经足够了。我什至已经在我的代码中使用了 customizeHttpRequest,但没有想到以这种方式使用它。感谢您指出这一点并提供一些来源,以防我需要更深入地挖掘。
    猜你喜欢
    • 2019-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-13
    • 2020-11-29
    • 2019-04-09
    • 2013-02-11
    相关资源
    最近更新 更多