使用Flurl时Basic授权失败,如何实现WebClient中的授权方式?
解决Flurl.Http实现Basic认证的问题
问题背景
WebClient通过以下方式可正确完成API认证:
client.Headers["authorization"] = $"Basic Njk4NzYzNTc6dGVzdHBhc3N3b33JkX0RFTU9QUklWQVRFS0VZMjNHNDQ3NXpYWlEyVUE1eDdN";
但使用Flurl.Http 3.0.4时,几种尝试均返回“invalid login or private key”错误:
await url.WithOAuthBearerToken("Njk4NzYzNTc6dGVzdHBhc3N3b3JkX0RFTU9QUklWQVRFS0VZMjNHNDQ3NXpYWlEyVUE1eDdN").GetJsonAsync(); await url.WithOAuthBearerToken("Basic Njk4NzYzNTc6dGVzdHBhc3N3b33JkX0RFTU9QUklWQVRFS0VZMjNHNDQ3NXpYWlEyVUE1eDdN").GetJsonAsync(); await url.WithHeader("authorization", "Njk4NzYzNTc6dGVzdHBhc3N3b33JkX0RFTU9QUklWQVRFS0VZMjNHNDQ3NXpYWlEyVUE1eDdN").GetJsonAsync(); await url.WithHeader("authorization", "Basic Njk4NzYzNTc6dGVzdHBhc3N3b3JkX0RFT3U9QUklWQVRFS0VZMjNHNDQ3NXpYWlEyVUE1eDdN").GetJsonAsync();
错误原因分析
WithOAuthBearerToken是用于Bearer令牌认证的方法,不适用于当前Basic认证场景;- 部分尝试的Authorization头存在格式错误:第三次尝试缺少
Basic前缀; - 最后一次尝试的Base64字符串存在拼写错误,与WebClient中的正确值不一致。
正确实现方式
方式一:完全匹配WebClient的头设置逻辑
直接设置与WebClient完全一致的Authorization头,确保包含Basic 前缀和完整正确的Base64字符串:
await url.WithHeader("authorization", "Basic Njk4NzYzNTc6dGVzdHBhc3N3b33JkX0RFTU9QUklWQVRFS0VZMjNHNDQ3NXpYWlEyVUE1eDdN").GetJsonAsync();
方式二:使用Flurl内置的Basic认证方法
如果能获取到Base64字符串解码后的原始用户名和密码,可以用WithBasicAuth方法自动生成认证头:
// 解码后的用户名:69876357,密码:testpassword_DEMOPRIVATEKEY2G4475zZQYUA5x7M await url.WithBasicAuth("69876357", "testpassword_DEMOPRIVATEKEY2G4475zZQYUA5x7M").GetJsonAsync();
该方法会自动完成用户名:密码拼接、Base64编码,并添加Basic 前缀,效果与WebClient写法完全一致。
内容的提问来源于stack exchange,提问作者Vague
相关产品推荐
相关产品推荐

