위 양식을 작성하고 제출하는 코드는 다음과 같습니다.
// 양식을 제출하기 위한 URI 문자열입니다.
문자열 uriString = " http://www.xxx.com/Login.aspx ";
// 제출할 문자열 데이터입니다.
string postString = "userName=user1&password=password1";
//웹클라이언트 초기화
WebClient webClient = 새로운 WebClient();
webClient.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
//문자열을 바이트 배열로 변환
byte[] postData = Encoding.ASCII.GetBytes(postString);
//데이터를 업로드하고 페이지의 바이트 배열을 반환합니다.
byte[] responseData = webClient.UploadData(uriString, "POST", postData);
//반환된 바이트 배열을 문자열(HTML)로 변환합니다.
string srcString = Encoding.UTF8.GetString(responseData);
srcStrinig는 양식을 제출한 후 반환된 페이지의 HTML입니다. 아주 간단해요.
그러나 위 코드는 ASP 또는 JSP로 생성된 양식을 제출할 수 있지만 ASP.NET 양식은 제출할 수 없습니다. ASP.NET 양식을 제출할 때 "__VIEWSTATE" 및 "__EVENTVALIDATION"에 값을 할당해야 하기 때문입니다. "__VIEWSTATE", "__EVENTVALIDATION" 값은 제출하려는 페이지에서 "소스 보기"를 마우스 오른쪽 버튼으로 클릭하시면 확인하실 수 있습니다. 다음과 같이:
id="__VIEWSTATE" value="/wEPDwUKMTg0NTgwMzM2M2RksjXHwIOzdq/skwDy1k6qTexm2j0="
id="__EVENTVALIDATION" value="/wEWBAKxhbOEAQKPpuq2CALyveCRDwLejM6fDwP2723lUdzBJVBIAVzbpM2sXYqc"
"소스 파일 보기"를 통해 얻은 "__VIEWSTATE", "__EVENTVALIDATION" 값은 양식에 직접 제출할 수 없으며 URL 인코딩된 문자열로 변환해야 합니다.
viewState = System.Web.HttpUtility.UrlEncode(viewState);
eventValidation = System.Web.HttpUtility.UrlEncode(eventValidation);
전체 코드는 다음과 같습니다.
// 제출 버튼 텍스트
string submitButton = "로그인";
//페이지의 상태 보기(IE를 통해 페이지를 열고 "소스 파일 보기"를 마우스 오른쪽 버튼으로 클릭하여 얻을 수 있음)
문자열 viewState = "/wEPDwUKMTg0NTgwMzM2M2RksjXHwIOzdq/skwDy1k6qTexm2j0=";
//이벤트페이지 유효성 검사(IE를 통해 페이지를 열고 "소스 파일 보기"를 마우스 오른쪽 버튼으로 클릭하여 얻을 수 있음)
string eventValidation = "/wEWBAKxhbOEAQKPpuq2CALyveCRDwLejM6fDwP2723lUdzBJVBIAVzbpM2sXYqc";
submitButton = System.Web.HttpUtility.UrlEncode(submitButton);
viewState = System.Web.HttpUtility.UrlEncode(viewState);
(
eventValidation);
{
// 양식을 제출하기 위한 URI 문자열입니다.
문자열 uriString = " http://www.xxx.com/Login.aspx ";
// 제출할 문자열 데이터입니다. 형식은 다음과 같습니다: user=uesr1&password=123
string postString = "userName=1&password=1" + "&loginButton=" + submitButton + "&__VIEWSTATE=" + viewState + "&__EVENTVALIDATION=" + eventValidation;
//웹클라이언트 초기화
WebClient webClient = 새로운 WebClient();
webClient.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
//문자열을 바이트 배열로 변환
byte[] postData = Encoding.ASCII.GetBytes(postString);
//데이터를 업로드하고 페이지의 바이트 배열을 반환합니다.
byte[] responseData = webClient.UploadData(uriString, "POST", postData);
// 반환된 바이트 배열을 문자열(HTML)로 변환합니다.
//ASP.NET에서 반환되는 페이지는 일반적으로 중국어 간체인 경우 유니코드를 사용해야 합니다.
// Encoding.GetEncoding("GB2312").GetString(responseData)
string srcString = Encoding.UTF8.GetString(responseData);
}
잡기 (WebException 우리)
{
문자열 msg = we.Message;
}
몇 가지 참고사항:
1) srcStrinig는 양식을 제출한 후 반환되는 페이지의 HTML입니다. 정규식을 사용하여 이를 분석하여 필요한 데이터를 얻을 수 있습니다.
2) "__VIEWSTATE"와 "__EVENTVALIDATION"의 값은 정적이지 않습니다.
3) 웹페이지 데이터 분석 도구인 HttpWatch, 네트워크 스니퍼 등과 같은 일부 도구를 통해 웹페이지 POST 데이터를 볼 수도 있습니다.
4) 제출된 양식에 인증번호가 포함되어 있는 경우에는 본 글의 범위에 속하지 않습니다.
이 기사의 URL: http://www.cnblogs.com/anjou/archive/2006/12/25/602943.html