2016-07-14 10 views
0

idHttp.post()를 사용하여 2 개의 사이트에서 이미 로그인하고 데이터를 게시하고 데이터를 게시했지만 세 번째 하나의
이 새로운 사이트에서 로그인이 가능하지만 다운로드 링크로 __doPostBack을 사용하는 파일을 다운로드하려고하면 오류 페이지로 리디렉션됩니다.
모든 게시물 데이터를 두 번 및 세 번 확인했습니다. http analyzer가 나에게 보여준 것과 정확히 같습니다 유일한 차이점은 다른 시도와 사이트에 성공적으로 액세스 했으므로 __ viewstate가 매번 동일하며 결코 변경되지 않지만이 세 번째 사이트에서는 각 로그인마다 변경됨 (내 말은 사이트를 수동으로 확인하고 http 분석기 결과를 확인할 수 있습니다. 각 시간마다 __viewstate 매개 변수 값이 다를 수 있습니다.)
어떻게해야합니까? 해당 __viewstate 매개 변수 변경 문제가 있습니까? 그렇다면 어떻게 해결할 수 있습니까?
내가 포스팅에 사용하는 코드 : 당신이 repsonsecode0를 확인 후 볼 수IdHttp : 파일을 다운로드하려고 할 때 오류 페이지로 리디렉션 될 때마다 __viewstate가 변경됩니다.

try 
Response := TMemoryStream.Create; 
try 
    Request := TStringList.Create; 
    try 
    Request.Assign(TATDFileUtility.convertPairValueToRequestList(TATDFileUtility.extractPairValue('the site login parameters.txt', 3))); 
    IdHTTP := TIdHTTP.Create; 
    try 
     IdHTTP.AllowCookies := True; 
     IdHTTP.HandleRedirects := True; 
     IdHTTP.Request.ContentType := 'application/x-www-form-urlencoded'; 

     IdHTTP.Post('thesite, the address for the login and main page and download page is the same', Request, Response); 
     Response.SaveToFile('responseCode0.txt'); 

     Request.Clear; 
     Response.Clear; 
     Request.Assign(TATDFileUtility.convertPairValueToRequestList(TATDFileUtility.extractPairValue('httpDownloadParamters.txt', 3))); 
     IdHTTP.Post('thesite, the address for the login and main page and download page is the same', Request, Response); 
     Response.SaveToFile('responseCode1.txt'); 

, 내가 로그인하고 있음을 알 수 있지만 두 번째 응답 코드는 나에게 오류를 표시하고 추적이 나는 것을 보여준다 오류 페이지로 리디렉션됩니다.

+1

무엇을 기대합니까? 우리는 어느 사이트가 어떤 코드를 보지 못했는지 알지 못합니다. 단지 추측 할 수 있습니다. 당신은 똑같은 것을 보냈다고 거짓말합니다 - 당신은 그렇지 않습니다. 올바른 __viewstate 값을 얻으려면 먼저 로그인 사이트에 액세스해야합니다. 그런 다음이 값으로 로그인 한 다음 값이 변경되었는지 다시 확인하고 새 값을 사용하십시오. 그것을 고치는 것은 쉽습니다 - 정확한 값을 보내십시오. – smooty86

+0

@ smooty86, 개인 정보 보호를 위해 사이트 주소를 공유 할 수는 없지만 코드는 위와 같습니다. –

+0

@ smooty86, 내가 동적으로 __viewstate를 얻을 필요가 있다면 어떻게 할 수 있습니까? 내 프로그램에 줄 수 있도록 현재 __viewstate 값을 얻을 수 있습니까?, thx –

답변

1

ViewState는 동적입니다. 먼저 GET 브라우저에서 포스트 백을 제출하는 <form> 요소를 정의하는 HTML 페이지가 필요합니다. 이를 통해 웹 서버는 현재 ViewState를 생성 할 수 있습니다. 그런 다음 HTML을 구문 분석하여 <form> 내에있는 <form> 요소의 이름과 값을 추출한 다음 <form>action 속성에 지정된 URL에 POST의 값을 입력하면됩니다. 이것은 웹 브라우저가 정상적으로 수행하는 작업이고, TIdHTTP을 사용하여 시뮬레이션해야하는 작업입니다.

+0

감사합니다! 실제로 viewstate 및 기타 매개 변수는 GET을 사용하고 나면 아쉽게도 동적 viewstate를 사용하고 아쉽게 결과를 공유하려고합니다. 요청에 대한 매개 변수의 순서가 중요합니까? 예를 들어 viewstate가 마지막 매개 변수가되는 것이 맞습니까? –

+0

서버 구현에 따라 순서가 중요 할 수도 있고 중요하지 않을 수도 있습니다. HTML 사양에서는 ''값을 HTML에 선언 된 순서대로 제출해야한다고 명시하고 있습니다. –

+0

로깅 후 GET을 사용하고 TRegEx를 사용하여 구문 분석하고 __ViewState 및 __eventValidation을 추가했으며 더 이상 오류 페이지가 없습니다 !! 그것을 고쳤다! 하지만, 비록 내가 마지막 POST에 의한 응답 코드 리턴 에러 페이지로 리다이렉트되지 않았더라도, 파일을 포함하지 않는다!이전 단계와 매우 흡사 한 html 코드, 로그인 페이지, 기본 페이지 및 다운로드 페이지가 동일한 주소임을 유의해야합니다. –