문제

이 코드는 작동하지 않습니다. HTTPS 프로토콜을 사용하는 웹 사이트에 로그인합니다. 이 문제를 해결하는 방법? 코드가 중지됩니다 GetRequestStream() 프로토콜 위반 예외는 다루어지지 않는다고 말할 때마다 ..

string username = "user";
string password = "pass";
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://moje.azet.sk/prihlasenie.phtml?KDE=www.azet.sk%2Findex.phtml%3F");
request.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705)";

Console.WriteLine(request.GetRequestStream());

using (StreamWriter writer = new StreamWriter(request.GetRequestStream(), Encoding.ASCII))
{
    writer.Write("nick=" + username + "&password=" + password);
}

HttpWebResponse response = (HttpWebResponse)request.GetResponse();
//Retrieve your cookie that id's your session
//response.Cookies

using (StreamReader reader = new StreamReader(response.GetResponseStream()))
{
    Console.WriteLine(reader.ReadToEnd());
}
도움이 되었습니까?

해결책

getRequestStream을 호출하기 전에 요청 메소드를 게시 할 수 있습니다

처럼

request.Method = "POST";

using (StreamWriter writer = new StreamWriter(request.GetRequestStream(), Encoding.ASCII))
{
    writer.Write("nick=" + username + "&password=" + password);
}

다른 팁

내 생각에 당신이 겪고있는 문제는 게시물 요청 대신 GET 요청을하고 있다는 사실 (다른 사람들이 조언 한 것과 마찬가지로) 때문입니다. 또한 해당 페이지의 비밀번호 필드의 실제 이름은 "암호"가 아니라 "heslo"라는 것을 알았습니다. 이 오타는 웹 서버가 응답을 반환하지 않게하지 않지만 서버가 암호 값으로 게시 할 특정 변수 이름을 찾고 있기 때문에 다른 문제가 발생합니다.

또한 게시 한 내용의 총 길이를 미리 파악하고 요청의 내용 길이로 설정할 수도 있습니다. 보다 MSDN:

HTTPWebRequest 클래스에 설정된 속성이 상충되는 경우 여러 경우에 프로토콜 비합 지출이 발생합니다. 이 예외는 응용 프로그램이 ContentLength 속성과 SendChunked 속성을 True로 설정 한 다음 HTTP get 요청을 보냅니다. 이 예외는 응용 프로그램이 HTTP 1.0 프로토콜 만 지원하는 서버로 청크를 보내려고하는 경우에 발생합니다. 이 예외는 응용 프로그램이 Contentlength 속성을 설정하지 않고 데이터를 보내려고하는 경우 발생합니다. 또는 버퍼링이 비활성화되고 keepalive 연결 중 (keepalive 속성이 참)가 허위입니다.

다음은 저에게 효과가 있습니다.

    var request = WebRequest.Create(_url);
    request.PreAuthenticate = true;
    request.Credentials = new NetworkCredential(_userName, _password);
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top