为何使用Flurl请求lyricsify.com会得到空响应?需如何配置?
问题原因与解决方案
核心原因:lyricsify.com会校验请求的
User-Agent请求头,Flurl默认的用户代理标识会被网站判定为非合法客户端,因此返回空响应体(状态码200是因为服务器正常接收了请求,只是拒绝返回有效内容)。解决方案:给Flurl请求添加符合浏览器规范的
User-Agent头,同时补充Accept头模拟真实浏览器的请求行为。
修改后的测试代码如下:
[Fact] public async void FlurlTest() { string googleResponse = await "https://www.google.com".GetStringAsync(); Debug.WriteLine($"googleResponse: {googleResponse}"); Assert.NotEmpty(googleResponse); string lyricsifyResponse = await "https://www.lyricsify.com" .WithHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36") .WithHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8") .GetStringAsync(); Debug.WriteLine($"lyricsifyResponse: {lyricsifyResponse}"); Assert.NotEmpty(lyricsifyResponse); }
如果需要全局配置,避免每个请求重复设置请求头,可以通过Flurl的全局配置实现:
FlurlHttp.Configure(settings => { settings.HttpClientFactory = new DefaultHttpClientFactory(() => { var client = new HttpClient(new HttpClientHandler()); client.DefaultRequestHeaders.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36"); client.DefaultRequestHeaders.Add("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8"); return client; }); });
内容的提问来源于stack exchange,提问作者mihca
相关产品推荐
相关产品推荐

