[英]HTTPWebResponse Failed to stream the response when passing “Combination Of Special characters” as password in Parameters
工作場景
當按如下方式傳遞第一個參數“ strPostData”(密碼中不包含特殊字符)時,xml請求意味着工作正常,StreamReader也提供了響應,並且成功加載了變量“ strResult”。“ Request = janajana”
不工作的情況
但是,當用戶密碼的第一個參數“ strPostData”中包含“特殊字符”時,StreamReader無法提供未成功加載的響應和變量“ strResult”。. "Request=<request><Username>jana</Username><Password>jana!@#$%^&*()</Password></request>"
當HTTPWebResponse失敗並且Streamreader也失敗時,通過“特殊字符”組合傳遞密碼。
我已經嘗試使用..與Stream對象聲明
//string tempString = Encoding.UTF8.GetString(buffer, 0, buffer.Length); &
讀取緩沖區代碼更改// // Int32 count =等待streamRead.ReadAsync(readBuffer,0,256); 但不起作用,,,請任何人指導我
public string[] GetResponseWebAPI(string strPostData, string strUrl)
{
string[] arrReturn = new string[3];
HttpWebResponse myHttpWebResponse = null;
ASCIIEncoding encoding = new ASCIIEncoding();
byte[] buffer = encoding.GetBytes(strPostData);
HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(strUrl);
myRequest.Timeout = 25000;// 25s
myRequest.Method = "POST";
myRequest.ContentType = "application/x-www-form-urlencoded";
myRequest.ContentLength = buffer.Length;
myRequest.AllowAutoRedirect = true;
ServicePointManager.ServerCertificateValidationCallback = new
System.Net.Security.RemoteCertificateValidationCallback
(AcceptAllCertifications);
Stream newStream = myRequest.GetRequestStream();
newStream.Write(buffer, 0, buffer.Length);
newStream.Close();
myHttpWebResponse = (HttpWebResponse)myRequest.GetResponse();
WebHeaderCollection webHeader = myHttpWebResponse.Headers;
arrReturn[0] = webHeader["Statuscode"];
arrReturn[1] = webHeader["Statusmessage"];
Stream streamResponse = myHttpWebResponse.GetResponseStream();
StreamReader streamRead = new StreamReader(streamResponse);
Char[] readBuffer = new Char[256];
int count = streamRead.Read(readBuffer,0, 256);
string strResult = string.Empty;
while (count > 0)
{
strResult += new String(readBuffer,0, count);
count = streamRead.Read(readBuffer,0, 256);
}
arrReturn[2] = strResult;
streamRead.Close();
streamResponse.Close();
myHttpWebResponse.Close();
return arrReturn;
}
我認為問題出在
myRequest.ContentType = "application/x-www-form-urlencoded";
因此,從這一行開始,您說的是內容是經過URL編碼的,應該進行轉義 。 因此,我認為,作為快速解決方案,您可以進行更改
byte[] buffer = encoding.GetBytes(strPostData);
至
byte[] buffer = encoding.GetBytes(WebUtility.UrlEncode(strPostData));
或者其他的東西。
但是我確實相信可以更好地表達這一意圖。 因此,請考慮使用HttpClient和FormUrlEncodedContent:
public string[] GetResponseWebAPI(string strPostData, string strUrl)
{
string[] arrReturn = new string[3];
ServicePointManager.ServerCertificateValidationCallback =
(sender, certificate, chain, sslPolicyErrors) => true;
var handler = new HttpClientHandler()
{
AllowAutoRedirect = false
};
using (var client = new HttpClient(handler))
using (var content =
new FormUrlEncodedContent(new[] {new KeyValuePair<string, string>("Request", strPostData)}))
{
client.Timeout = TimeSpan.FromSeconds(25);
var response = client.PostAsync(strUrl, content).GetAwaiter().GetResult();
arrReturn[0] = response.Headers.GetValues("Statuscode").FirstOrDefault();
arrReturn[1] = response.Headers.GetValues("Statusmessage").FirstOrDefault();
arrReturn[2] = response.Content.ReadAsStringAsync().GetAwaiter().GetResult();
}
return arrReturn;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.