簡體   English   中英

從idhttp獲取字符串get

[英]Get string from a idhttp get

目前,我能夠運行命令,但是我無法弄清楚如何將結果轉換為字符串。

我像這樣

idhttp1.get('http://codeelf.com/games/the-grid-2/grid/',TStream(nil));

而且一切似乎運行正常,在wireshark中,我可以看到該命令的結果。 現在如果我願意

HTML := idhttp1.get('http://codeelf.com/games/the-grid-2/grid/');

它會凍結應用程序,在wireshark中,我可以看到它發送了GET並獲得了響應,但不知道為什么它凍結了。 HTML只是一個字符串變量。

編輯完整代碼

按鈕單擊login(EUserName.Text,EPassWord.Text);

    procedure TForm5.Login(name: string; Pass: string);
var
 Params: TStringList;
 html : string;
begin
  Params := TStringList.Create;
  try
    Params.Add('user='+name);
    Params.Add('pass='+pass);
    Params.Add('sublogin=Login');


    //post password/username
     IdHTTP1.Post('http://codeelf.com/games/the-grid-2/grid/', Params);
    //get the grid source
     HTML := idhttp1.Get('http://codeelf.com/games/the-grid-2/grid/');

  finally
    Params.Free;
  end;
llogin.Caption := 'Logged In';
end;

響應我得到的響應是: Transfer-Encoding: chunked\\r\\nContent-Type: text/html\\r\\n不知道這是否重要。 謝謝

Indy支持某些類型的流HTTP響應(請參閱New TIdHTTP hoNoReadMultipartMIME標志 ),但這僅在服務器使用multipart / *響應時才有用。 鏈接的博客文章進一步解釋了詳細信息,還顯示了Indy HTTP組件如何為MIME解碼器提供連續的響應流。

如果這不適用於您的情況,則解決方法是轉到“原始” TCP層,這意味着使用TIdTCPClient組件發送HTTP請求,然后從命令行逐行(或逐字節)讀取響應。 IOHandler。 這樣可以完全控制響應處理。 請求和響應應在線程中處理,以使其與主線程分離。

TIdHTTP.Post()返回響應數據,您不應調用TIdHTTP.Get()來分別檢索它:

procedure TForm5.Login(name: string; Pass: string);
var
  Params: TStringList;
  html : string;
begin
  Params := TStringList.Create;
  try
    Params.Add('user='+name);
    Params.Add('pass='+pass);
    Params.Add('sublogin=Login');

    //post password/username
    HTML := IdHTTP1.Post('http://codeelf.com/games/the-grid-2/grid/', Params);
  finally
    Params.Free;
  end;
  llogin.Caption := 'Logged In';
end;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM