2009-09-30 13 views
13

Cách thực hiện chính xác POST tới máy chủ HTTPS và nhúng dữ liệu đăng nhập một cách chính xác. Mã dưới đây không trả lại bất kỳ cookie nào (trong Wininet). Tôi tự hỏi làm thế nào thư viện HTTP POCO xử lý chuyển hướng HTTP?POCO C++ - NET SSL - cách POST yêu cầu HTTPS

MyApp() 
{ 
    try 
    { 
     const Poco::URI uri("https://localhost.com"); 
     const Poco::Net::Context::Ptr context(new Poco::Net::Context(Poco::Net::Context::CLIENT_USE, "", "", "rootcert.pem")); 
     Poco::Net::HTTPSClientSession session(uri.getHost(), uri.getPort(), context); 
     Poco::Net::HTTPRequest req(Poco::Net::HTTPRequest::HTTP_POST, "/login.php"); 
     req.setContentType("Content-Type: application/x-www-form-urlencoded\r\n"); 
     req.setKeepAlive(true); 

     std::string reqBody("username=???&password=???&action_login=Log+In\r\n\r\n"); 
     req.setContentLength(reqBody.length()); 

     //Poco::Net::HTTPBasicCredentials cred("???", "???"); 
     //cred.authenticate(req); 
     session.sendRequest(req) << reqBody; 
     Poco::Net::HTTPResponse res; 
     std::istream& rs = session.receiveResponse(res); 
     std::string resp; 

     std::vector<Poco::Net::HTTPCookie> cookies; 
     res.getCookies(cookies); 
    } 
    catch(const Poco::Net::SSLException& e) 
    { 
     std::cerr << e.what() << ": " << e.message() << std::endl; 
    } 
    catch(const std::exception& e) 
    { 
     std::cerr << e.what() << std::endl;; 
    } 

}; 

Trả lời

10

Bạn đang thiết kiểu nội dung như thế này:

req.setContentType("Content-Type: application/x-www-form-urlencoded\r\n"); 

mà nên là:

req.setContentType("application/x-www-form-urlencoded\r\n");