私は最終的に、Synapse ライブラリで直接ソケットを使用して HTTPS 経由でデータを送信する Delphi アプリケーションを手に入れました。
しかし、返されたデータのサイズを判断するのに苦労しています。
現在、次のコードがあります。
Socket := TTCPBlockSocket.Create;
status := TStringList.Create;
status.Append('LineBuffer length: ' + IntToStr(Length(Socket.LineBuffer)));
status.Append('Waiting bytes: ' + IntToStr(Socket.WaitingDataEx));
status.Append('recvBufferStr: ' + CRLF + Socket.RecvBufferStr(240, 25000) );
status.Append('LastError = ' + Socket.LastErrorDesc);
status.Append('Error code: ' + IntToStr(Socket.LastError));
Memo1.Lines.AddStrings(status);
そして、Memo1 で次のように取得します。
socket lastError = 0
LineBuffer length: 0
Waiting bytes: 0
recvBufferStr:
HTTP/1.1 200 OK
Date: Thu, 22 Dec 2011 01:06:07 GMT
Server: Apache
Content-Length: 237
Connection: close
Content-Type: text/plain; charset=utf-8
[***The returned Data***]
Socket.RecvBufferStrの最初のパラメーター (受信する長さ) が大きすぎると、サーバーが送信を完了してもデータを待機しているため、winsock エラー 10054 が発生します。
短すぎる場合 (ほとんどの場合そうです)、指定された量のデータしか取得できません。
待機中のバイト数とラインバッファの長さが 0 を示しているので (それが longInt であり、IntToStr を実行しているためかどうかはわかりません)、データの量を確認する方法ではないと思います。また、 CanReadと CanReadEx を使用してみましたが、役に立ちませんでした。
次のようなことをしたいと思います: Socket.RecvBufferStr ([受信する長さ]、[すべてのデータが受信されるまで] または 25000)。
別の機能がある場合はそれで問題ありませんが、シナプスから試したHTTPSendやその他の機能は私の目的では機能しないため、TTCPBlockSocketに固執したいと思います。
Delphi/Pascal でSynapseライブラリのTTCPBlockSocketソケットを使用して、サーバーから返されるデータの量を確認するにはどうすればよいですか?