2014-06-23 2 views
3

TIdHTTP Indy Tool을 사용하여 Delphi에서 URL에 액세스하려고합니다. 나는 다음과 같은 짓을 :URL이 데이터를 반환하지 않음 Delphi Indy TIdHttp

  • 설정 쿠키 = 진정한
  • 세트 리디렉션 = 진정한
  • 추가에게 TIdCookieManager

http://sms.saicomvoice.co.za:8900/saicom/index.php?action=login&username=SOME_USERNAME&password=SOME_PASSWORD&login=login

POST 요청 작업을 처리 동의하고 그것을 반환 HTML. 문제는 올바른 HTML을 반환하지 않는다는 것입니다 (아래 이미지 참조).

URL (사용자 이름과 암호 기입)을 가져 와서 브라우저에 붙여 넣으면 정확하게 동일한 웹 사이트에 로그인합니다. 하지만 Delphi App을 사용하면 로그인 페이지의 HTML이 반환됩니다.

요청은 Delphi의 TTimer에서 시간 경과없이 실행되어야합니다.

누구든지 나를 올바른 길로 인도하거나이 문제를 어떻게 해결할 수있는 방향으로 나를 가리킬 수 있습니까?

몇 가지 추가 정보

  • WriteStatus이 TListBox
  • BtnEndPoll에 출력을 기록하는 절차 것은 * 타이머를

    Procedure TfrmMain.TmrPollTimer(Sender: TObject); 
    Var 
        ResultHTML: String; 
        DataToSend: TStringList; 
    Begin 
        Inc(Cycle, 1); 
    
        LstStatus.Items.Add(''); 
        LstStatus.Items.Add('=================='); 
        WriteStatus('Cycle : ' + IntToStr(Cycle)); 
        LstStatus.Items.Add('=================='); 
        LstStatus.Items.Add(''); 
    
        DataToSend := TStringList.Create; 
    
        Try 
        WriteStatus('Setting Request Content Type'); 
        HttpRequest.Request.ContentType := 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8'; 
        WriteStatus('Setting Request User Agent'); 
        HttpRequest.Request.UserAgent := 'Mozilla/5.0 (Windows NT 5.1; rv:2.0b8) Gecko/20100101 Firefox/4.0b8'; 
    
        WriteStatus('Posting Request'); 
        ResultHTML := HttpRequest.Post(FPostToURL, DataToSend); 
        WriteStatus('Writing Result'); 
        FLastResponse := ResultHTML; 
    
        WriteStatus('Cycle : ' + IntToStr(Cycle) + ' -- FINISHED'); 
        LstStatus.Items.Add(''); 
        Except 
        On E: Exception Do 
         Begin 
         MakeNextEntryError := True; 
         WriteStatus('An Error Occured: ' + E.Message); 
    
         If ChkExceptionStop.Checked Then 
          Begin 
          BtnEndPoll.Click; 
          WriteStatus('Stopping Poll Un Expectedly!'); 
          End; 
         End; 
        End; 
    End; 
    

* 이미지 예를 정지

HTML Output

+1

대신 HTML의 관련 부분을 텍스트로 포함 할 수 있습니까? – mjn

답변

4

HttpRequest.Request.ContentType = "text/html과 애플리케이션/XHTML + XML 애플리케이션/XML, Q = 0.9, 이미지/WebP 형식, /; Q = 0.8 ' ;

유효한 ContentType 값이 아닙니다. 그런 종류의 가치는 대신 Request.Accept 속성에 속합니다. 클라이언트가 응답에서 받아 들일 ContentTypes를 서버에 알려줍니다.

ResultHTML : = HttpRequest.Post (FPostToURL, DataToSend);

빈을 게시하고 있습니다.브라우저의 주소 표시 줄에 URL을 퍼팅은 GET 요청이 아닌 POST 요청을 전송, 그래서 당신은 대신 TIdHTTP.Get()를 사용한다 : 서버에 제출되는 HTML의 웹 양식을 시뮬레이션하기를 원한다면

ResultHTML := HttpRequest.Get('http://sms.saicomvoice.co.za:8900/saicom/index.php?action=login&username=SOME_USERNAME&password=SOME_PASSWORD&login=login'); 

당신은 TIdHTTP.Post()을 사용 (예 : method=post을 지정). 예 :

DataToSend.Add('username=SOME_USERNAME'); 
DataToSend.Add('password=SOME_PASSWORD'); 
DataToSend.Add('login=Login'); 
ResultHTML := HttpRequest.Post('http://sms.saicomvoice.co.za:8900/saicom/index.php?action=login', DataToSend); 
+0

Get Request를 추가했지만 로그인 페이지 HTML – user3564246

+0

Never Mind가 반환되기 때문에 어떤 이유로 실제 데이터를 게시하지 않는 것처럼 보입니다. 나는 문제를 발견하고 그것을 고쳤다. 귀하의 솔루션에 도움을 주셔서 감사합니다. – user3564246