스크린 스케이프에 웹 사이트에 프로그래밍 방식으로 로그인하는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/975426

  •  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 스니핑 없음 - 브라우저 컨트롤에서 수행되는 모든 것.

그렇게하면 몇 가지 제안이 더 있습니다.

  1. Flash와 같은 추가 기능을로드하는 것을 방지 할 수 있습니다. 시간을 절약 할 수 있습니다.
  2. 로그인하면 DOM에서 필요한 정보를 얻을 수 있습니다. RAW HTML을 구문 분석 할 필요가 없습니다.
  3. 미래의 사이트가 변경 될 경우 도구를 더욱 휴대용으로 만들려면 명시 적 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

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top