历时两周,整整两周,才把这个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程序相关推荐

  1. 编写运行最简单的java程序——使用记事本编写java程序

    编写运行最简单的java程序--使用记事本编写java程序 第一个java程序--使用记事本编辑 经过上篇文章的java环境搭建成功的小伙伴们可以在自己的计算机上编写属于自己的java程序了yo~ 还 ...

  2. 通过汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的

    实验目的: 通过反汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的 实验过程: 通过vi程序进行编程: int g(int x) { return x + 3; } int f(int x) ...

  3. python123程序设计题说句心里话_用c++写一个简单的计算器程序

    // 050305.cpp : 定义控制台应用程序的入口点. // // 050304.cpp : 定义控制台应用程序的入口点. // //四则运算 #include "stdafx.h&q ...

  4. 简单的小程序实现ATM机操作

    简单的小程序实现ATM机操作 代码如下: package Day06; import java.util.Scanner; public class TestAccount { public stat ...

  5. 注释和简单用户交互程序

    一.注释 Python的注释很简单,有两种方法: 1. #这是注释 改方法会注释掉该行"#"号后面的所有内容,注释掉的内容不会被运行 2. 1 '''这是注释 2 这是注释 3 这 ...

  6. C#编写简单的聊天程序

    原文:http://www.tracefact.net/CSharp-Programming/Simple-Chat.aspx 引言 这是一篇基于Socket进行网络编程的入门文章,我对于网络编程的学 ...

  7. Windows socket之最简单的socket程序

    Windows socket之最简单的socket程序 原文:Windows socket之最简单的socket程序 最简单的服务器的socket程序流程如下(面向连接的TCP连接 ): 1. WSA ...

  8. 使用timer控件创建一个简单的报警程序

    简介: 当我使用计算机工作时,我总是如此的专心致志,以至于每当我过了"一会儿"去看时间时,发现已经过了三个小时,而我却完全没有意识到!所以我决定使用我从Code Project学来 ...

  9. Spring Security第1部分–具有数据库的简单登录应用程序

    什么是Spring Security? Spring Security是一个提供安全解决方案的框架,可在Web请求级别和方法级别上处理身份验证和授权. Spring安全性通过两种方式处理安全性. 一种 ...

最新文章

  1. R语言使用ggplot2包的快速可视化函数qplot绘制分组箱图(jitter、分组颜色配置)实战
  2. php gd库截图,php使用gd库实现截屏的实例代码
  3. Java实现链表结构的具体代码
  4. C语言linux getopt_long()函数(命令行解析)(getopt、getopt_long_only)(短选项 -,长选项 --)(option结构体)(optind、optarg变量)
  5. lda主题评论文本python_利用python做LDA文本分析,该从哪里入手呢?
  6. Flink 与 TiDB 联合发布实时数仓最佳实践白皮书
  7. 【译】NoClassDefFoundError和ClassNotFoundException的不同
  8. 啪啪三国2获取服务器信息,啪啪三国2怎么快速的获得资源?
  9. Jquery实现列表框效果
  10. java 前端导出exvel_java导出数据到Excel文件 前端进行下载
  11. 全球唯一标识符 System.Guid.NewGuid().ToString()
  12. python set_Python的set集合详解
  13. 【信息系统项目管理师】第12章-项目采购管理 知识点详细整理
  14. J2SE5 中的最新注释功能SuppressWarnings(转)
  15. 最新可用快手极速版自动阅读薅羊毛autojs脚本
  16. python做erp系统的可行性_ERP可行性分析
  17. 浙江工业大学计算机专业考研心得
  18. hibernate的检索策略(抓取策略)
  19. 内存管理基础学习笔记 - 4.3 缺页中断处理 - handle_pte_fault
  20. 四.Protobuf3 缺省值

热门文章

  1. linux最新内核5.80版本移植详细过程
  2. 财务自由之路——我的投资史
  3. QT中C++程序和QML的集成
  4. 20201222英语单词学习(仅供自己记录)
  5. 如何下载天坛街道卫星地图高清版大图
  6. 第三方视频应用系统开辟互联网营销蓝海
  7. 【历史上的今天】9 月 8 日:阿里开放平台计划;英特尔发布首款双核酷睿处理器;我国研制全数字高清晰度电视系统
  8. 使用Beagle进行基因型填充
  9. 3D渲染软件综合介绍
  10. 小程序textarea完美填坑