2

Delphi 6 時代には Indy を使用していましたが、現在は Indy 10 で遊んでいます。私がやりたいことは信じられないほど単純ですが、それを行う簡単な方法が見当たらないので、何かが欠けているに違いありません。

私がやりたいことは次のようなものです:

これが私が使用している実際のコードです:

procedure TForm1.btnGetURLClick(Sender: TObject);
begin
  moHeader.Lines.Clear;
  moBody.Lines.Clear;
  try
    moBody.text := IdHttp1.Get(edURL.text);
  finally
  end;
end;   

リクエストが完了すると、http_result には指定された URL からの HTML が含まれているはずです。ただし、これは機能していないように見えるので、おそらくコンポーネントの IOHandler プロパティまたは OnWork イベントを使用する必要があると感じていますが、その使用法は私には明らかではないようで、機能する例が見つかりませんでしたグーグルで。これは以前に行われたことだと確信しているので、どんな助けもいただければ幸いです。

追加情報: より具体的に説明するために、次のことを知りたいと思います。2. もしそうなら、なぜそれが機能していないのでしょうか? 3. 私が使用している compiler/os/Indy の組み合わせにバグがある可能性は常にあります。(動作するはずですが)。

言及する必要がありますが、常に「接続が適切に閉じられました」というポップアップが表示されます。これは例外のようで、関数の結果に干渉している可能性があります。これを TRY...FINALLY でトラップしようとしましたが、うまくいきません。おそらく、Get メソッドの実行後に Indy がバックグラウンドで例外をトリガーしているためだと思います。

最後に、混乱を解消するために実行中のプログラムのスクリーンキャストを次に示し ます

4

5 に答える 5

4

私はあなたがTIdHTTPを持っていると思います。HandleRedirectsプロパティがfalseに設定されている場合、「HTTP / 1.1 302 Found」というエラーが発生した場合は、これを試すことができます

var
http_result:string;    
Begin
IdHTTP1.HandleRedirects:=True;
http_result := IdHTTP1.Get('http://www.google.com');

End;
于 2009-11-16T15:54:06.880 に答える
2

別のオプションは、synapseを使用することです。このライブラリを使用して Web ページを取得するために必要なことは次のとおりです。

uses
  ...,HTTPSEND;

var
  Result : TStrings;


  if HTTPGetText('http://www.google.com',Result) then
    // do something with result

Synapse は軽量の TCPIP ライブラリです。ライブラリは積極的にメンテナンスされており、現在のバージョンは Delphi 2009/2010 で正常に動作します。これはコンポーネント ベースのフレームワークではないため、他のスレッド化手法 ( OmniThreadLibraryAsyncCallsなど) と組み合わせて使用​​するのは非常に簡単です。

于 2009-11-16T17:11:19.890 に答える
2

プロパティ HandleRedirects を true に設定する必要があります。

フォームは必要ありません。GExperts コンポーネントを使用してコーディングすると、次のようになります。

var
  IdHTTP: TIdHTTP;

IdHTTP := TIdHTTP.Create(Self);
with IdHTTP do
begin
  Name := 'IdHTTP';
  AllowCookies := True;
  HandleRedirects := True;
  HTTPOptions := [hoForceEncodeParams];
end;

これをユニットに貼り付けるだけで十分です。

于 2009-11-16T15:49:46.513 に答える
0

この質問はかなり長い間開かれているので、私はそれを締めくくります。私の解決策は、ポスターの1つが示唆しているように、Synapseを使用することでした。最小限の変更でWindows/Linux / Mac OSで動作し、ライブラリ/スレッドで正常に動作します。

于 2011-03-03T02:33:11.250 に答える
0

ウェブサイトがリダイレクトする場合は、いくつかのハンドラー (onredirect など) をオーバーライドする必要もあります。しかし、これは indy9 iirc でも同様でした。

于 2009-11-16T15:45:23.590 に答える