下面的代码在响应内容中给出了相当奇怪的错误ERR: Missing UA30.我在互联网上任何地方都找不到这个错误.这种情况只发生在某些特定的网站上. 在this repo上同时有另一个版本的代码测试服务器ics URL. 由于F#和C#共享相同的框架,我怀疑这也会发生在C#上,但我没有测试过它,因为我的C#不是那么流利.

open System.Net.Http

let url = "https://portal.macleans.school.nz/index.php/ics/school.ics"
(* other working urls:
    "https://gist.githubusercontent.com/DeMarko/6142417/raw/1cd301a5917141524b712f92c2e955e86a1add19/sample.ics"
    "https://www.kayaposoft.com/enrico/ics/v2.0?country=gbr&fromDate=01-01-2023&toDate=31-12-2023&region=eng"
    "https://www.phpclasses.org/browse/download/1/file/63438/name/example.ics"
    *)


let getAsync (client: HttpClient) (url: string) =
    async {
        let! content = client.GetStringAsync url |> Async.AwaitTask
        let len = content.Length
        printf "%d" len

        match len with
        | len when len < 50 -> printfn " content: %s" content
        | _ -> printfn ""
    }

let client = new HttpClient()

getAsync client url
|> Async.RunSynchronously

我try 的所有内容都记录在上面提到的GitHub repo中.

我预计不会出现错误,因为curl命令能够毫无问题地下载ics文件-

curl https://portal.macleans.school.nz/index.php/ics/school.ics -o output.ics

推荐答案

您可以try 在您的HTTP请求中设置用户代理设置标头. 例如:

open System.Net.Http

let url = "https://portal.macleans.school.nz/index.php/ics/school.ics"

let getAsync (client: HttpClient) (url: string) =
    async {
        let request = new HttpRequestMessage(HttpMethod.Get, url)
        request.Headers.Add("User-Agent", "NonEmptyUA")

        let! response = client.SendAsync(request) |> Async.AwaitTask
        let content = response.Content.ReadAsStringAsync() |> Async.AwaitTask
        printfn "Response content length: %d" (content.Length)

        if content.Length < 50 then
            printfn "Response content: %s" content
    }

let client = new HttpClient()

getAsync client url
|> Async.RunSynchronously

Csharp相关问答推荐

如何使用FastEndpoints和.NET 8 WebAppliationBuilder进行集成测试?

为什么.Equals(SS,StringComparison. ClientCultureIgnoreCase)在Net 4.8和6.0之间不同?

当Visual Studio处于升级管理模式时,无法安装Torch运行时

在Dapper中使用IasyncEum重写GetAsyncEum方法

如何在C#中删除一个特殊字符,如"使用Regex"

C++/C#HostFXR通过std::tuple传递参数

如何使用XmlSerializer反序列化字符串数组?

更新产品但丢失产品ASP.NET Core的形象

.NET 6控制台应用程序,RabbitMQ消费不工作时,它的程序文件中的S

在.NET 7.0 API控制器项目中通过继承和显式调用基类使用依赖项注入

net中从位图获取坐标和绘制折线

EF核心区分大小写的主键

未在Windows上运行的Maui项目

System.NotSupportdException:流不支持读取

基于C#方法的EF核心过滤查询(缓冲与流)

RCL在毛伊岛应用程序和Blazor服务器应用程序.Net 8.0中使用页面

如何解决System.StackOverflowException:抛出System.StackOverflowException类型的异常.&# 39;生成随机代码时发生异常?

如何在C#控制台应用程序中获取用户输入并将其作为订单项目进行处理?

如何在Xamarin.Forms中检索PanGesture事件的位置?

将列表转换为带有逗号分隔字符串形式的值的字典