스크린 스케이프에 웹 사이트에 프로그래밍 방식으로 로그인하는 방법은 무엇입니까?
-
13-09-2019 - |
문제
정보를 수집하기 위해 웹 사이트에 로그인 해야하는이 정보를 얻으려면 내 웹 사이트의 정보가 필요합니다.이 정보는 HTML 양식을 통해 발생합니다. C#에서이 인증 된 스크린 커넥션을 어떻게 할 수 있습니까?
추가 정보:
- 쿠키 기반 인증.
- 사후 조치가 필요했습니다.
해결책
방금 양식을 작성한 것처럼 요청을 할 것입니다. 예를 들어 게시물이라고 가정하면 올바른 데이터로 게시물 요청을합니다. 이제 스크랩하려는 동일한 페이지에 직접 로그인 할 수없는 경우 로그인 요청 후 설정된 쿠키를 추적하고 스크래핑 요청에 포함시켜 로그인을 유지할 수 있도록해야합니다.
다음과 같습니다.
HttpWebRequest http = WebRequest.Create(url) as HttpWebRequest;
http.KeepAlive = true;
http.Method = "POST";
http.ContentType = "application/x-www-form-urlencoded";
string postData="FormNameForUserId=" + strUserId + "&FormNameForPassword=" + strPassword;
byte[] dataBytes = UTF8Encoding.UTF8.GetBytes(postData);
http.ContentLength = dataBytes.Length;
using (Stream postStream = http.GetRequestStream())
{
postStream.Write(dataBytes, 0, dataBytes.Length);
}
HttpWebResponse httpResponse = http.GetResponse() as HttpWebResponse;
// Probably want to inspect the http.Headers here first
http = WebRequest.Create(url2) as HttpWebRequest;
http.CookieContainer = new CookieContainer();
http.CookieContainer.Add(httpResponse.Cookies);
HttpWebResponse httpResponse2 = http.GetResponse() as HttpWebResponse;
아마도.
다른 팁
당신은 a를 사용할 수 있습니다 웹 브라우저 제어. 사이트의 URL을 공급 한 다음 DOM을 사용하여 사용자 이름과 암호를 오른쪽 필드로 설정하고 결국 제출 버튼으로 클릭하십시오. 이렇게하면 두 입력 필드와 제출 버튼 만 신경 쓰지 않습니다. 쿠키 취급, 원시 HTML 구문 분석, HTTP 스니핑 없음 - 브라우저 컨트롤에서 수행되는 모든 것.
그렇게하면 몇 가지 제안이 더 있습니다.
- Flash와 같은 추가 기능을로드하는 것을 방지 할 수 있습니다. 시간을 절약 할 수 있습니다.
- 로그인하면 DOM에서 필요한 정보를 얻을 수 있습니다. RAW HTML을 구문 분석 할 필요가 없습니다.
- 미래의 사이트가 변경 될 경우 도구를 더욱 휴대용으로 만들려면 명시 적 DOM 조작을 JavaScript 주입으로 대체 할 수 있습니다. JS는 외부 자원에서 얻을 수 있으며, 한 번도 필드 인구와 제출을 할 수 있습니다.
어떤 경우에는 httpResponse.Cookies
비워집니다. 사용 CookieContainer
대신에.
CookieContainer cc = new CookieContainer();
HttpWebRequest http = WebRequest.Create(url) as HttpWebRequest;
http.KeepAlive = true;
http.Method = "POST";
http.ContentType = "application/x-www-form-urlencoded";
http.CookieContainer = cc;
string postData="FormNameForUserId=" + strUserId + "&FormNameForPassword=" + strPassword;
byte[] dataBytes = UTF8Encoding.UTF8.GetBytes(postData);
http.ContentLength = dataBytes.Length;
using (Stream postStream = http.GetRequestStream())
{
postStream.Write(dataBytes, 0, dataBytes.Length);
}
HttpWebResponse httpResponse = http.GetResponse() as HttpWebResponse;
// Probably want to inspect the http.Headers here first
http = WebRequest.Create(url2) as HttpWebRequest;
http.CookieContainer = cc;
HttpWebResponse httpResponse2 = http.GetResponse() as HttpWebResponse;
dlambin 답변에 추가하여
http.AllowAutoRedirect=false;
그렇지 않으면
HttpWebResponse httpResponse = http.GetResponse() as HttpWebResponse;
초기 URL에 또 다른 요청을하고 URL2를 검색 할 수 없습니다.
httpwebrequest를 사용하고 게시물을 수행해야합니다. 이 링크는 시작하는 데 도움이됩니다. 열쇠는 게시물을 제출하기 위해 양식에 필요한 모든 매개 변수를보기 위해 게시하려는 페이지의 HTML 형식을 살펴 봐야한다는 것입니다.
http://www.netomatix.com/httppostdata.aspx
http://geekswithblogs.net/rakker/archive/2006/04/21/76044.aspx