天天看点

POCO库下访问HTTPS获取返回的JSON数据

访问HTTPS不同于访问HTTP,一些接口如登录还有一些需要数据加密的就需要访问HTTPS才能获取到返回数据,下面是具体介绍:

1.下载POCO库,下载时需要注意POCO库(下载地址点击打开链接)有俩个版本,其中一个是没有HTTPS文件的,这是我们要下载下面的库(poco-1.7.2-all),然后编译使用

2.下载完POCO库后还不能直接用,需要下载ActivePerl(下载地址点击打开链接)和OpenSSL(下载地址点击打开链接),然后编译将生成include、bin和lib文件拷到相应工程目录下(具体编译方法不做介绍了,可去网上搜),然后就可以进行访问了

下面的是具体的访问代码:

#include "stdafx.h"
#include <iostream>

#include "Poco/Net/HTMLForm.h"
#include "Poco/URI.h"
#include "Poco/Net/HTTPClientSession.h"
#include "Poco/Net/HTTPRequest.h"
#include "Poco/Net/HTTPResponse.h"
#include "Poco/StreamCopier.h"
#include "Poco/Net/NetException.h"

#include "Poco/JSON/Object.h"
#include "Poco/JSON/Parser.h"
#include "Poco/Dynamic/Var.h"

#include "Poco/Net/HTTPSClientSession.h"
#include "Poco/Net/Context.h"
#include "Poco/Net/SSLException.h"

using namespace::Poco::JSON;


int _tmain(int argc, _TCHAR* argv[])
{
	Poco::URI purl("");//这里输入完整的URL
	 try
	{
		
		Poco::Net::Context::Ptr context = new Poco::Net::Context(Poco::Net::Context::CLIENT_USE, "", "", "", Poco::Net::Context::VERIFY_NONE, 9, false);
		Poco::Net::HTTPSClientSession session(context);
		session.setHost(purl.getHost());
		session.setPort(purl.getPort());
		Poco::Net::HTTPRequest req(Poco::Net::HTTPRequest::HTTP_GET, purl.getPathAndQuery(), Poco::Net::HTTPMessage::HTTP_1_1);
		std::ostream& ostr = session.sendRequest(req);
		Poco::Net::HTTPResponse res;
		std::istream& istr = session.receiveResponse(res);

		std::string temp;
		Poco::StreamCopier::copyToString(istr, temp);
		std::cout << temp << std::endl;
	}
	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;;
	}

	system("PAUSE");


	return 0;
}
           

继续阅读