1
HTTPClientSession session(uri.getHost(), uri.getPort());
HTTPRequest req(HTTPRequest::HTTP_GET, path, HTTPMessage::HTTP_1_1);
session.setTimeout(Poco::Timespan(20,0));
session.sendRequest(req);
HTTPResponse res;
istream& rs = session.receiveResponse(res);

File saveTo(request.name,File::WriteOnly,true);
char aux_buffer[1024];
rs.read(aux_buffer, 1024);
std::streamsize n = rs.gcount();
while (n > 0){
    saveTo.write(aux_buffer,n);
    if (rs){
        rs.read(aux_buffer, 1024);
        n = rs.gcount();
    }
    else n = 0;
    }

}

ダウンロードする前にダウンロードサイズを取得する方法は? ファイルが壊れることがあるので、サイズを確認したいです。

4

1 に答える 1

3

HTTPResponse::getContentLength()またはを使用できますgetContentLength64()

このメッセージのコンテンツの長さを返します。Content-Lengthヘッダーが存在しない場合は、UNKNOWN_CONTENT_LENGTHになる可能性があります。

HTTPClientSession::receiveResponse()ヘッダーを受信するには、最初に呼び出す必要があることに注意してください。HTTPResponse::getStatus()また、リクエストが正常であったこと、および特定のタイプを期待しているかどうかを確認することもHTTPResponse::getContentType()できます。

PDFの場合、ファイル自体の開始/終了マーカーを確認できます。%PDF-X.Y%適切なPDFファイルは(XYはバージョンを表す)で始まり%%EOF、0x0Dおよび/または0x0Aが続く可能性があります。PDFファイルには複数の%%EOFマーカーが含まれている場合があります。

于 2012-11-15T17:00:16.830 に答える