Мне нужно сделать запрос POST с использованием .Net.Повторное соединение с HttpWebRequest в C#
Я могу выполнить проверку подлинности с помощью GET, и поэтому я пытаюсь сделать запрос POST на том же соединении, чтобы сохранить мою аутентификацию.
Проблема заключается в том, что я получаю исключение 401 Not Authenticated, которое подразумевает, что соединение не было повторно использовано.
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("my-server");
request.Credentials = new NetworkCredential("user", "password");
request.GetResponse().Close(); // Works fine
// Now the request I want to make...
request = (HttpWebRequest)WebRequest.Create("my-server");
request.Credentials = new NetworkCredential("user", "password");
request.Method = "post";
string postData = "param1=1¶m2=2";
byte[] data = new ASCIIEncoding().GetBytes(postData);
request.ContentLength = data.Length;
request.ContentType = "application/x-www-form-urlencoded";
using (Stream stream = request.GetRequestStream())
{
stream.Write(data, 0, data.Length);
stream.Close();
request.GetResponse().Close(); // This line gets a 401 Not Authorized error.
}
EDIT: Было высказано предположение, что мне необходимо передать файлы cookie. Ниже не работает либо:
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("my-server");
request.Credentials = new NetworkCredential("user", "password");
var response = (HttpWebResponse)request.GetResponse();
var cookieContainer = new CookieContainer();
foreach (Cookie cookie in response.Cookies)
{
cookieContainer.Add(cookie);
}
response.Close();
// Now the request I want to make...
request = (HttpWebRequest)WebRequest.Create("my-server");
request.Credentials = new NetworkCredential("user", "password");
request.CookieContainer = cookieContainer;
request.Method = "post";
string postData = "param1=1¶m2=2";
byte[] data = new ASCIIEncoding().GetBytes(postData);
request.ContentLength = data.Length;
request.ContentType = "application/x-www-form-urlencoded";
using (Stream stream = request.GetRequestStream())
{
stream.Write(data, 0, data.Length);
request.GetResponse().Close(); // This line gets a 401 Not Authorized error.
}
возможно дубликат [Повторное использование в HttpWebRequest?] (Http://stackoverflow.com/questions/2179626/reuse-a-httpwebrequest) –
Ответ был закрыть ответ. Я сделал это на третьей линии. – Paul
«использование» автоматически закроет поток, поэтому, возможно, удалите «stream.Close();» помогу. –