2

そのため、これは問題なく機能していましたが、「ピアによってソケット エラー #10054 接続がリセットされました」というメッセージが表示されるようになりました。

Indy パッケージを更新すると、それが発生し始めたと思います。それ以来、今日初めてコードを実行しました。

更新によってこのコードの動作がどのように変更されたのか、またそれを解決する方法を誰か説明できますか?

ありがとうございました

function PostData(url : string; param: TStringList) : string;
var
  text: string;
  sHttpSocket: TIdHTTP;
  sshSocketHandler: TIdSSLIOHandlerSocketOpenSSL;
  resStream: TStringStream;
begin
  sHttpSocket := TIdHTTP.create;
  sshSocketHandler := TIdSSLIOHandlerSocketOpenSSL.create;
  sHttpSocket.IOHandler := sshSocketHandler;
  sHttpSocket.Request.ContentType := 'application/x-www-form-urlencoded';
  sHttpSocket.Request.Method := 'POST';
  resStream := TStringStream.create; 
  sHttpSocket.Post(url, param, resStream);
  resStream.Seek(0, soFromBeginning);
  text := resStream.DataString;
  result := text;
end;
4

1 に答える 1

6

HTTPS URL に投稿する場合はTIdSSLIOHandlerSocketOpenSSL、接続しようとしているサーバーに対して が適切に構成されていることを確認してください。デフォルトは、サーバーが実際に期待しているものと一致しない可能性があります。特に、TIdSSLIOHandlerSocketOpenSSL.MethodおよびTIdSSLIOHandlerSocketOpenSSL.SSLVersionsプロパティのデフォルトは TLSv1 ですが、サーバーが TLSv1 をサポートしていない可能性があります。

ちなみに、 D2009 TStringStream+ では以前のバージョンとは動作が異なるため、これを避けて、Indy にテキストをデコードさせることをお勧めします。

function PostData(const url : string; params: TStrings) : string; 
var 
  sHttpSocket: TIdHTTP; 
  sshSocketHandler: TIdSSLIOHandlerSocketOpenSSL; 
begin 
  sHttpSocket := TIdHTTP.Create; 
  try
    sshSocketHandler := TIdSSLIOHandlerSocketOpenSSL.Create(sHttpSocket); 
    // configure sshSocketHandler as needed...
    // perhaps try this at a minimum:
    // sshSocketHandler.SSLOptions.Method := sslvSSLv23;
    sHttpSocket.IOHandler := sshSocketHandler; 
    Result := sHttpSocket.Post(url, params); 
  finally
    sHttpSocket.Free;
  end;
end; 
于 2012-06-12T00:53:24.167 に答える