You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows服务器向Linux服务器传输含!的密码报错求助

解决含感叹号的Basic Auth密码传输问题

问题出在手动处理Basic认证编码的方式不符合HTTP规范,和Windows/Linux的转义规则无关。以下是两种解决方案:

方案1:使用RestSharp内置Basic认证器(推荐)

RestSharp提供了专门的HttpBasicAuthenticator,会自动遵循RFC 7617规范处理用户名和密码的编码,包括特殊字符,无需手动拼接和转码:

string Username = "myUserName";
string Password = "password123!";

var client = new RestClient("https://linuxserver/xml-data/data-producer-listdata");
// 配置内置Basic认证
client.Authenticator = new HttpBasicAuthenticator(Username, Password);

var request = new RestRequest("", Method.Get);
request.AddHeader("cache-control", "no-cache");
request.AddHeader("Connection", "keep-alive");

var response = client.Execute(request);

方案2:手动规范编码(不推荐)

如果必须手动处理认证头,需改用UTF-8编码(HTTP Basic Auth规范要求)而非ASCII编码,确保特殊字符被正确转换:

string Username = "myUserName";
string Password = "password123!";
string authenticationString = $"{Username}:{Password}";
// 用UTF-8编码替代ASCII
byte[] authBytes = System.Text.Encoding.UTF8.GetBytes(authenticationString);
string base64EncodedAuthenticationString = Convert.ToBase64String(authBytes);

var client = new RestClient("https://linuxserver/xml-data/data-producer-listdata");

var request = new RestRequest("", Method.Get);
request.AddHeader("cache-control", "no-cache");
request.AddHeader("Authorization", "Basic " + base64EncodedAuthenticationString);
request.AddHeader("Connection", "keep-alive");
var response = client.Execute(request);

为什么之前的方法失效?

HTTP Basic Auth规范要求将用户名密码拼接后用UTF-8编码再转Base64,而非ASCII。虽然!属于ASCII字符,但部分服务端会严格校验编码格式,手动用ASCII编码可能导致服务端解析失败,返回400错误。

内容的提问来源于stack exchange,提问作者David

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 00:49:51