URL не връща данни Delphi Indy TIdHttp

Опитвам се да осъществя достъп до URL в Delphi с помощта на TIdHTTP Indy Tool. Направих следното:

  • Задайте Приемане на бисквитки = True
  • Задайте пренасочване на манипулатора = True
  • Добавен е TidCookieManager

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

Заявката за публикуване работи и връща HTML. Проблемът е, че не връща правилния HTML (вижте изображението по-долу).

Ако взема този URL адрес (Попълване на потребителското име и паролата) и го поставя в браузъра си, точно същият като моето Delphi приложение ще влезе в правилния уебсайт. Но веднага щом го направя с моето приложение Delphi, то връща HTML за страницата за вход.

Заявката трябва да бъде изпълнена своевременно в TTimer в Delphi.

Може ли някой да ме насочи към правилния път или да ме насочи в посока как мога да разреша този проблем?

Допълнителна информация

  • 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 изход


person user3564246    schedule 23.06.2014    source източник
comment
можете ли вместо това да включите съответната част от HTML като текст?   -  person mjn    schedule 23.06.2014


Отговори (1)


HttpRequest.Request.ContentType := 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,/;q=0.8';

Това не е валидна ContentType стойност. Вместо това този вид стойност принадлежи към свойството Request.Accept. Той казва на сървъра кои ContentTypes клиентът ще приеме в отговора.

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

Публикувате празно TStringList. Поставянето на URL в адресната лента на браузъра изпраща GET заявка, а не POST заявка, така че трябва да използвате TIdHTTP.Get() вместо това:

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

Бихте използвали TIdHTTP.Post(), ако искате да симулирате HTML уеб формуляра, който се изпраща на сървъра (тъй като указва 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);
person Remy Lebeau    schedule 23.06.2014
comment
Добавих заявката за получаване, но по някаква причина сякаш не публикува действителните данни, защото все още връща HTML страницата за вход - person user3564246; 24.06.2014
comment
Няма значение. Открих проблема и го поправих. Благодаря ви, че вашето решение помогна - person user3564246; 24.06.2014