已經設定了Headers 但是有時候還是會出現401錯誤。
賬戶沒有問題。頻率時高時低
試過設定
request.Credentials = CredentialCache.DefaultCredentials;
request.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)";
認證:
// 添加https
if (EndPoint.Substring(0, 8) == "https://")
{
//設定證書接受狀態
ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);
}
//證書設定
private static bool CheckValidationResult(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors)
{
return true; //總是接受
}
介面是Rest API
//設定安全協議 Tls:192 Tls11:768 Tls12:3072
ServicePointManager.SecurityProtocol = (SecurityProtocolType)192 | (SecurityProtocolType)768 | (SecurityProtocolType)3072;
var request = (HttpWebRequest)WebRequest.Create(EndPoint + parameters);
request.Method = Method.ToString();
request.ContentLength = 0;
request.ContentType = ContentType;
request.Headers.Add("Authorization", strAuthorization);
if (!string.IsNullOrEmpty(PostData) && Method == HttpVerbNew.POST)//如果傳送的資料不為空,并且方法是post
{
var bytes = Encoding.GetEncoding("UTF-8").GetBytes(PostData);//編碼方式按自己需求進行更改,我在專案中使用的是UTF-8
request.ContentLength = bytes.Length;
using (var writeStream = request.GetRequestStream())
{
writeStream.Write(bytes, 0, bytes.Length);
}
}
if (!string.IsNullOrEmpty(PostData) && Method == HttpVerbNew.PUT)//如果傳送的資料不為空,并且方法是put
{
var bytes = Encoding.GetEncoding("UTF-8").GetBytes(PostData);//編碼方式按自己需求進行更改,我在專案中使用的是UTF-8
request.ContentLength = bytes.Length;
using (var writeStream = request.GetRequestStream())
{
writeStream.Write(bytes, 0, bytes.Length);
}
}
using (var response = (HttpWebResponse)request.GetResponse())
{
var responseValue = string.Empty;
if (response.StatusCode != HttpStatusCode.OK)
{
var message = String.Format("Request failed. Received HTTP {0}", response.StatusCode);
throw new ApplicationException(message);
}
// 回傳結果
using (var responseStream = response.GetResponseStream())
{
if (responseStream != null)
using (var reader = new StreamReader(responseStream))
{
responseValue = reader.ReadToEnd();
}
}
return responseValue;
uj5u.com熱心網友回復:
一般不自己拼接Authorization的具體字串。原因是當服務器401進行授權挑戰時,可以使用不同的方案,以及不同的引數。
比如方案就有Basic/Digest/Negotiate等等。即使你用同一批用戶名密碼,不同的方案/引數下,Authorization的字串結果是不一樣的。
通常的方法是設定request .Credentials,讓HttpWebRequest去自適應。
uj5u.com熱心網友回復:
老哥,授權使用的是Basic64的加密(“Basic base64.encode(account:pwd)"),使用postman卻沒有出現該問題。
而且在測驗環境中呼叫并沒有出現過401的錯誤,在正式環境使用時出現的這個問題
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/73231.html
