POCO::Net 简单的HTTPS程序
历时两周,整整两周,才把这个HTTPS的程序弄好,不知是笨还是什么的,谢天谢地,总算能发送了。
开始时走了很多弯路,一是POCO库下载了个阉割版本的,OpenSSL也下了个阉割版本的,搞的自己
奇怪了一两天,一直在国外网上找寻有用的信息。google都搜烂了。第一周过后,虽然能使用HTTP
发送程序了,却留下了HTTPS这个难题,只能下周才能慢慢解决了。
第二周,仔细阅读POCO官方的文档,发现POCO还有一个完全版,OpenSSL也有一个供开发者使用
的完全版,赶紧下下来,小心地编译,这次比较幸运,与前几次抓狂相比,Crypto模块和OpenSSL模块
成功的编译过去了,不过在编译相应的samples时出现了错误。
编译好后,果然可以使用HTTPSClientSession这个类了,用它赶快写了一个程序,结果一上来crash,
_pInstance为空。赶快查询函数的注释,说:如果要使用OpenSSL库,则必须在任何使用它的类之前,初始化
它,用context,好吧,继续google,终于在一篇文章上找到了一个用例。抄一遍,仔细阅读下,发送成功了
不过收到的却是一个JavaScript脚本(这是错误的,应该收到一个XML数据)。用Qt做了个实验,收到同样
的数据,我以为是正确的了,就这样继续做其他的事了。余下的一两天都在弄经常报出的SSL异常,空指针
什么的。最终在周五,我发现了,那就是,我发送数据的目的地地址是错的,我一直在错的地址上做实验,
然后用正确的,又报SSL异常,最后最后的,改变了两个函数,收到了,正常的数据。这是一段难忘的经历
,它告诉我,做事一定要仔细,不要放过任何蛛丝马迹!
让我们来初略分析一下这个HTTPS小程序:
首先,得编译含有OpenSSL库的POCO库,下载Win32OpenSSL-1_0_1c.exe和poco-1.4.3p1-all.zip,exe
安装到C盘把,因为POCO编译的时候默认指定C盘根下,顺便在安装好后把文件夹名字改成OpenSSL。解压
zip到C盘把,图个方便,如果要改指定的OpenSSL路径,编辑buildWin.bat。添加INCLUE和LIB环境变量
(各自指向OpenSSL相应的目录)我用的的是VS2005.所以编译运行buildWin 80。
中途可能会遇到画面停留死都不动的地方,可能在什么DOMWriter地方,多按记下Ctrl+C,当然了要选N。
编译结束。
随便打开一个NetSSL_OpenSSL目录下的sample工程,把里面代码全注释了,然后就在这个工程写自己的程序.
Poco::Net::Context::Ptr m_context = new Context(Context::CLIENT_USE, "", "", "", Context::VERIFY_NONE, 9, false);//没搞懂这些参数,先这样写着
HTTPSClientSession session(m_context);
URI uri("服务器的域名或IP地址");
HTTPRequest request(HTTPRequest::HTTP_POST,"你要访问的目标在服务器上的路径");
session.setHost(uri.getHost());
session.setPort("服务器的端口");
session.sendRequest(request) << "要发送的数据";HTTPResponse response;
std::istream& res = session.receiveResponse(response);
std::string str;//用作接受数据
res>>str; //开始接受数据
session.reset();//重置会话,接待下次连接
完了,看似简单,唉,错一个参数,就会导致异常的发生,这对一个先接触Qt的我来说,情何以堪啊。很奇怪,
它这个地方的接受数据的方法是同步调用的,但看源代码的话,它里面是个do_while循环,可以理解了,同时,
你可以设置超时时间限制。点点滴滴,一言难尽,慢慢熟悉把。
POCO::Net 简单的HTTPS程序相关推荐
- 编写运行最简单的java程序——使用记事本编写java程序
编写运行最简单的java程序--使用记事本编写java程序 第一个java程序--使用记事本编辑 经过上篇文章的java环境搭建成功的小伙伴们可以在自己的计算机上编写属于自己的java程序了yo~ 还 ...
- 通过汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的
实验目的: 通过反汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的 实验过程: 通过vi程序进行编程: int g(int x) { return x + 3; } int f(int x) ...
- python123程序设计题说句心里话_用c++写一个简单的计算器程序
// 050305.cpp : 定义控制台应用程序的入口点. // // 050304.cpp : 定义控制台应用程序的入口点. // //四则运算 #include "stdafx.h&q ...
- 简单的小程序实现ATM机操作
简单的小程序实现ATM机操作 代码如下: package Day06; import java.util.Scanner; public class TestAccount { public stat ...
- 注释和简单用户交互程序
一.注释 Python的注释很简单,有两种方法: 1. #这是注释 改方法会注释掉该行"#"号后面的所有内容,注释掉的内容不会被运行 2. 1 '''这是注释 2 这是注释 3 这 ...
- C#编写简单的聊天程序
原文:http://www.tracefact.net/CSharp-Programming/Simple-Chat.aspx 引言 这是一篇基于Socket进行网络编程的入门文章,我对于网络编程的学 ...
- Windows socket之最简单的socket程序
Windows socket之最简单的socket程序 原文:Windows socket之最简单的socket程序 最简单的服务器的socket程序流程如下(面向连接的TCP连接 ): 1. WSA ...
- 使用timer控件创建一个简单的报警程序
简介: 当我使用计算机工作时,我总是如此的专心致志,以至于每当我过了"一会儿"去看时间时,发现已经过了三个小时,而我却完全没有意识到!所以我决定使用我从Code Project学来 ...
- Spring Security第1部分–具有数据库的简单登录应用程序
什么是Spring Security? Spring Security是一个提供安全解决方案的框架,可在Web请求级别和方法级别上处理身份验证和授权. Spring安全性通过两种方式处理安全性. 一种 ...
最新文章
- R语言使用ggplot2包的快速可视化函数qplot绘制分组箱图(jitter、分组颜色配置)实战
- php gd库截图,php使用gd库实现截屏的实例代码
- Java实现链表结构的具体代码
- C语言linux getopt_long()函数(命令行解析)(getopt、getopt_long_only)(短选项 -,长选项 --)(option结构体)(optind、optarg变量)
- lda主题评论文本python_利用python做LDA文本分析,该从哪里入手呢?
- Flink 与 TiDB 联合发布实时数仓最佳实践白皮书
- 【译】NoClassDefFoundError和ClassNotFoundException的不同
- 啪啪三国2获取服务器信息,啪啪三国2怎么快速的获得资源?
- Jquery实现列表框效果
- java 前端导出exvel_java导出数据到Excel文件 前端进行下载
- 全球唯一标识符 System.Guid.NewGuid().ToString()
- python set_Python的set集合详解
- 【信息系统项目管理师】第12章-项目采购管理 知识点详细整理
- J2SE5 中的最新注释功能SuppressWarnings(转)
- 最新可用快手极速版自动阅读薅羊毛autojs脚本
- python做erp系统的可行性_ERP可行性分析
- 浙江工业大学计算机专业考研心得
- hibernate的检索策略(抓取策略)
- 内存管理基础学习笔记 - 4.3 缺页中断处理 - handle_pte_fault
- 四.Protobuf3 缺省值