2014-07-16 9 views
0

는 POCO HTTP POST 요청은 항상 "SSL 연결이 예기치 않게 닫힘"를 반환 사용하여 HTTPS URL에 파일을 업로드하는 것은 내가의 멀티 파트 업로드 사용하고있는 코드입니다 파일 ..POCO을 사용하여 파일을 업로드 - 예외 아래</p> <p>SSL 연결 예기치 않게 청산 예외

try 
{ 
    Poco::URI uri(uploadLink); 
    const Poco::Net::Context::Ptr context = new Poco::Net::Context(Poco::Net::Context::CLIENT_USE, "", "", "", Poco::Net::Context::VERIFY_NONE, 9, false, "ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH"); 
    Poco::Net::HTTPSClientSession session(uri.getHost(), uri.getPort(), context); 
    session.setKeepAlive(true); 

    // prepare path 
    std::string path(uri.getPathAndQuery()); 
    if (path.empty()) 
    { 
     path = "/"; 
    } 
    std::cout<<"\nPath: "<<path; 


    std::ifstream f1 (filePath,std::fstream::binary); 
std::string content((std::istreambuf_iterator<char>(f1)), std::istreambuf_iterator<char>()); 

std::cout<<"\n Fle Content: "<<content; 

std::string boundary = "-------------------------87142694621188"; 
std::string data1("---------------------------87142694621188\r\nContent-Disposition: form-data; name=\"data\"; filename=\""); 
std::string data2(filePath); 
std::string data3("\";\r\nContent-Type: application/octet-stream\r\n\r\n"); 
std::string data4("\r\n---------------------------87142694621188--\r\n"); 

std::string reqBody = data1 +data2 +data3 + content + data4; 
std::cout<<"\nReq Body: "<<reqBody.c_str(); 
Poco::Net::HTTPRequest req(Poco::Net::HTTPRequest::HTTP_POST, path, Poco::Net::HTTPMessage::HTTP_1_1); 
req.setKeepAlive(true); 
req.setContentType("multipart/form-data; boundary=-------------------------87142694621188"); 
req.setContentLength(reqBody.length()); 

    // sends request, returns open stream 
    std::ostream& myOStream = session.sendRequest(req); 
    // sends the body 
    myOStream << reqBody; 

    Poco::Net::HTTPResponse res; 

    // get the response body from server 
    std::istream& inStream = session.receiveResponse(res); 
    std::ostringstream outStringStream; 
    outStringStream << inStream.rdbuf(); 
    std::cout<< outStringStream.str(); 

} 
catch (Poco::Exception& e) 
{ 
    std::cout <<"Upload Exception: "<< e.displayText() << std::endl; 
} 

나는 또한 HTML 양식으로 시도 :

Poco::Net::HTTPRequest request(Poco::Net::HTTPRequest::HTTP_POST, path,  Poco::Net::HTTPMessage::HTTP_1_1); 
request.setKeepAlive(true); 

request.setContentLength(1041); 
Poco::Net::HTMLForm form; 
form.setEncoding(Poco::Net::HTMLForm::ENCODING_MULTIPART); 

form.addPart("file", new Poco::Net::FilePartSource(filePath)); 
form.prepareSubmit(request); 

session.setTimeout(Poco::Timespan(20, 0)); 

form.write(session.sendRequest(request));   

Poco::Net::HTTPResponse res; 
std::istream &is = session.receiveResponse(res); 
Poco::StreamCopier::copyStream(is, std::cout); 
    std::cerr << is.rdbuf(); 

그러나 두 가지 방법이 같은 오류를 반환합니다. 다른 플랫폼을 통한 업로드가 작동하므로 서버 문제가 아니라 말할 수 있지만 문제는 위의 코드에 나와 있습니다. 이 문제를 도와주세요. 참고 : 서버는 청크 분할 전송을 지원하지 않습니다. 그리고 서버 측 오류 로그에 "잘못된 전송 인코딩 : 청크"라고 표시됩니다. 비록 내가 chunked 전송을하고 있지 않다.

업데이트 :

내가 (경계를 설정하여) 첫 번째 코드를 사용하여 파일을 업로드 할 마지막 수 있어요,하지만 난이 (예기치 않게 닫힌 SSL 연결)오고에 대해 얘기했다 예외가 내가 읽어하려고 할 때 응답 본문을 사용하여 스트림에서 :

outStringStream < < inStream.rdbuf();

서버에서 일반 텍스트를 다시 보내고 있습니다. 어떻게해야합니까?

답변