[英]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\\n
和Content-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.