.Net을 사용하여 POST 요청을해야합니다.C#에서 HttpWebRequest와의 연결 재사용
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.
}
편집 : 쿠키를 전송해야한다는 몇 가지 제안이있었습니다. 다음은 작동하지 않습니다 중 하나
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();" 도움이 될 것입니다. –