2012-11-30 6 views
1

URL에 게시물을 보내고 응답이 url (jsessionid 포함)으로 리디렉션되는 경우 true가됩니까? else false. 어떻게 작성하나요?응답 redirect = true 인 경우

namespace WindowsFormsApplication1 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     public bool od_auth(string login, string pass) 
     { 
      string HTML = PostData(""); 

      return true; 
     } 

     private void Auth_Click(object sender, EventArgs e) 
     { 
      string login = textBox1.Text; 
      string pass = textBox2.Text; 
      bool avt = od_auth(login, pass); 
     } 
     public static string PostData(string file, string data) 
     { 
      var cookies = new CookieContainer(); 
      HttpWebRequest request = (HttpWebRequest)WebRequest.Create(file); 
      request.Method = "POST"; 
      request.CookieContainer = cookies; 
      request.AllowAutoRedirect = true; 
      request.ContentType = "application/x-www-form-urlencoded"; 
      byte[] EncodedPostParams = Encoding.UTF8.GetBytes(data); 
      request.ContentLength = EncodedPostParams.Length; 
      request.GetRequestStream().Write(EncodedPostParams, 
              0, 
              EncodedPostParams.Length); 
      request.GetRequestStream().Close(); 
      HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 
      string html = new StreamReader(response.GetResponseStream(), 
              Encoding.UTF8).ReadToEnd(); 
      return html; 
     } 
    } 
} 

답변

1

당신은 response.StatusCode 확인해야

http://msdn.microsoft.com/en-us/library/system.web.httpresponse.statuscode.aspx)

및 리다이렉트 상태 코드 (301, 302, 303)의 테스트 :

http://msdn.microsoft.com/fr-fr/library/aa383887%28en-us,VS.85%29.aspx

@hvd가 말한대로 request.AllowAutoRedirect = true; 때문에 작동하지 않아야합니다.

당신은해야합니다

  • 그것은 "위치에 따라, 리디렉션 상태 코드
  • 빌드 새로운 요청 인 경우 부울 따라 설정 response.StatusCode에 대한 request.AllowAutoRedirect = false;
  • 체크를 설정 "응답을 검색합니다.

둘째 요청에 아무 것도 추가하지 않으면 어쩌면 응답을 그냥 비교할 수 있습니다. 응답 범위가 file이면 응답이 리디렉션되었는지 확인할 수 있습니다.

+0

질문의 코드는 AllowAutoRedirect = true를 설정 했으므로 반환 된 상태 코드는 30x가 될 수 있습니까? 30 배이면 리다이렉트가 이미 따라 왔고 새로운 요청이 전송되었고 새로운 요청의 상태 코드는'response.StatusCode'가 보여야하는 것입니다. – hvd

+0

@hvd : 네 말이 맞아. 나는 그 질문을 간과했다. 내 대답을 완료 할 것입니다. – jbl

관련 문제