Cześć,
Mam problem z kodem wykorzystującym POCO.
Zgodnie z dokumentacją POCO wspiera digest authentication.
Zrobiłem zgodnie z instrukcją, ale nie jestem w stanie się zalogować tam gdzie stosowany jest digest authentication.
Naskrobałem, wiec test (gtest) pokazujący problem (pełen kod, wystarczy dodać biblioteki POCO i gtest):
#include "UnitTest.h"
#include <Poco/Net/HTTPRequest.h>
#include <Poco/Net/HTTPResponse.h>
#include <Poco/Net/HTTPSClientSession.h>
#include <Poco/Net/HTTPClientSession.h>
#include <Poco/StreamCopier.h>
#include <Poco/Net/HTTPCredentials.h>
using namespace Poco::Net;
TEST(PocoDigestAuthTest, HttpBibOrgTest) {
HTTPClientSession session;
session.setHost("httpbin.org");
HTTPRequest request(
"GET",
// "http://httpbin.org/basic-auth/user/passwd", // basic
"http://httpbin.org/digest-auth/auth/user/passwd", // digest
HTTPMessage::HTTP_1_1);
session.sendRequest(request);
HTTPResponse response;
std::istream& firstResponseStream = session.receiveResponse(response);
std::stringstream firstStrStream;
Poco::StreamCopier::copyStream(firstResponseStream, firstStrStream);
ASSERT_EQ(HTTPResponse::HTTP_UNAUTHORIZED, response.getStatus());
HTTPCredentials creds("user", "passwd");
creds.authenticate(request, response);
session.sendRequest(request);
std::istream& bodyStream = session.receiveResponse(response);
EXPECT_NE(HTTPResponse::HTTP_UNAUTHORIZED, response.getStatus());
EXPECT_EQ(HTTPResponse::HTTP_OK, response.getStatus());
std::stringstream strStream;
Poco::StreamCopier::copyStream(bodyStream, strStream);
EXPECT_NE("", strStream.str());
}
Test nie przechodzi już na EXPECT_NE(HTTPResponse::HTTP_UNAUTHORIZED
.
Jak zmienię uri na logowanie na basic authatentication, wszystko działa.