Question

J'essaie de créer une application C ++ pour accéder à une ressource XML.Utilisation de HTTP Le code fonctionne bien, à partir de ce que je peux dire auprès des documents, tout ce que je dois faire pour que le HTTPS fonctionne est de vous assurer que SSL est installé (oui L'édition Dev est installée) et modifier le sournoisement à HTTPStreamFactory.

Voici le code qui fonctionne:

Poco::Net::HTTPStreamFactory::registerFactory();
Poco::URI uri(argv[1]);

std::auto_ptr<std::istream> pStr(Poco::URIStreamOpener::defaultOpener().open(uri));
std::string str;      
StreamCopier::copyToString(*pStr.get(), str);

Voici le code qui échoue Poco :: net :: httpstroamfactory :: enregistréFactory (); POCO :: Uri Uri (Argv [1]);

std::auto_ptr<std::istream> pStr(Poco::URIStreamOpener::defaultOpener().open(uri));
std::string str;      
StreamCopier::copyToString(*pStr.get(), str);

Lorsque je fais une demande w / httpstroamfactory, c'est le message d'erreur que je reçois:

pointeur null: _PInstance [dans le fichier "/Home/chpick/poco-1.3.6p2/util/include/poco/util/application.h", ligne 422]

J'ai joint l'application.h

inline Application& Application::instance()
{
    poco_check_ptr (_pInstance);
    return *_pInstance;
}

Toute aide serait formidable.Merci

Était-ce utile?

La solution 2

J'ai fini par aller à ce sujet différent: voici ce que j'ai fait.

    const Poco::URI uri(xmlParams.restURI);
    std::string path(argv[1]);
    const Poco::Net::Context::Ptr context = new Context(Context::CLIENT_USE, "", "", "", Context::VERIFY_NONE, 9, false, "ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH");
    Poco::Net::HTTPSClientSession session(uri.getHost(), uri.getPort(), context );
    Poco::Net::HTTPRequest req(Poco::Net::HTTPRequest::HTTP_GET, argv[1] );
    req.setKeepAlive(false);

  std::string strToSend = "/";
    session.sendRequest(req) << strToSend;
    Poco::Net::HTTPResponse res;
    std::istream& rs = session.receiveResponse(res);    // typedef std::istream XMLCharInputStream;

    std::string str;    
    StreamCopier::copyToString(rs, str);

    std::istringstream istr(str);
    InputSource source(istr);
    parser.parse(&source);

Autres conseils

Vérifiez la documentation pour quelque chose dans le sens du certificat de chèque.Vous voyez, SSL fonctionne par les certificats du serveur et de l'échange de clients, et dans chaque bibliothèque que j'ai utilisée, SSL, le développeur doit créer une fonction ou d'une autre manière valider le certificat envoyé par le serveur;Ce qui signifie généralement que le développeur accepte simplement quoi que ce soit sans vérifier, car la plupart des gens ne se soucient pas vraiment de cela.Votre programme pourrait être erroné, car ce code est appelé, et rien n'est retourné, une null est donc en état d'être déréférencée, ou quelque chose comme ça.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top