<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>slm的研发笔记</title>
    <link>https://007slm.github.io/</link>
    <description>Recent content on slm的研发笔记</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>zh-cn</language>
    <lastBuildDate>Fri, 01 Feb 2019 15:50:51 +0800</lastBuildDate>
    
        <atom:link href="https://007slm.github.io/index.xml" rel="self" type="application/rss+xml" />
    
    
    <item>
      <title>关于</title>
      <link>https://007slm.github.io/about/</link>
      <pubDate>Sun, 20 Aug 2017 21:38:52 +0800</pubDate>
      
      <guid>https://007slm.github.io/about/</guid>
      
        <description>&lt;p&gt;Talk is cheap show the code.&lt;/p&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/007slm&#34;&gt;GitHub&lt;/a&gt;.&lt;/p&gt;
</description>
      
    </item>
    
    <item>
      <title>Vimexplorer02</title>
      <link>https://007slm.github.io/post/vimexplorer/vimexplorer02/</link>
      <pubDate>Fri, 01 Feb 2019 15:50:51 +0800</pubDate>
      
      <guid>https://007slm.github.io/post/vimexplorer/vimexplorer02/</guid>
      
        <description>

&lt;h2 id=&#34;本节核心特性&#34;&gt;本节核心特性&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;通过webbrowser渲染界面&lt;/li&gt;
&lt;li&gt;c#和webBrowser交互&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;引入CefSharp造成编译问题&lt;/p&gt;

&lt;p&gt;&lt;a href=&#34;https://stackoverflow.com/questions/9086795/the-outputpath-property-is-not-set-for-this-project&#34;&gt;https://stackoverflow.com/questions/9086795/the-outputpath-property-is-not-set-for-this-project&lt;/a&gt;&lt;/p&gt;
</description>
      
    </item>
    
    <item>
      <title>vim方式操作windows的explorer</title>
      <link>https://007slm.github.io/post/vimexplorer/vimexplorer01/</link>
      <pubDate>Fri, 01 Feb 2019 15:49:09 +0800</pubDate>
      
      <guid>https://007slm.github.io/post/vimexplorer/vimexplorer01/</guid>
      
        <description>

&lt;h2 id=&#34;本节核心特性&#34;&gt;本节核心特性&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;获取已经打开的窗口列表&lt;/li&gt;
&lt;li&gt;激活某个需要的窗口&lt;/li&gt;
&lt;/ol&gt;

&lt;h2 id=&#34;下一节核心特性&#34;&gt;下一节核心特性&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;通过webbrowser渲染界面&lt;/li&gt;
&lt;li&gt;c#和webBrowser交互&lt;/li&gt;
&lt;/ol&gt;

&lt;h2 id=&#34;通过shdocvw-shellwindows-获取打开的explorer-窗口信息&#34;&gt;通过SHDocVw.ShellWindows 获取打开的explorer 窗口信息&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;c#中需要通过project的add reference 引入Microsoft Internaet controls 1.1
因为我们需要通过SHDocVw.ShellWindows 来获得已经打开的exploer窗口
SHDocVw.ShellWindows shellWindows = new SHDocVw.ShellWindowsClass();&lt;/li&gt;
&lt;li&gt;在references 种找到SHDocVw 关闭属性 embed interop Types 否则 SHDocVw.ShellWindowsClass 会编译不通过。&lt;/li&gt;
&lt;/ol&gt;

&lt;h2 id=&#34;激活windows应用的窗口-setforegroundwindow是不够的&#34;&gt;激活windows应用的窗口(SetForegroundWindow是不够的)&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c#&#34; data-lang=&#34;c#&#34;&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;14
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;15
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;16
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;17
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;18
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;19
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;20
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;21
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;22
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;23
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;24
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;25
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;26
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;27
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;28
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c#&#34; data-lang=&#34;c#&#34;&gt;&lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;void&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ActiveWindow&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;IntPtr&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;hWnd&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;

    &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hWnd&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;GetForegroundWindow&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;())&lt;/span&gt;
        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;

    &lt;span class=&#34;n&#34;&gt;IntPtr&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ThreadID1&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;GetWindowThreadProcessId&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;GetForegroundWindow&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(),&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;IntPtr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Zero&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
    &lt;span class=&#34;n&#34;&gt;IntPtr&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ThreadID2&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;GetWindowThreadProcessId&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hWnd&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;IntPtr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Zero&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;

    &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ThreadID1&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;!=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ThreadID2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
        &lt;span class=&#34;n&#34;&gt;AttachThreadInput&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ThreadID1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ThreadID2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
        &lt;span class=&#34;n&#34;&gt;SetForegroundWindow&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hWnd&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
        &lt;span class=&#34;n&#34;&gt;AttachThreadInput&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ThreadID1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ThreadID2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
    &lt;span class=&#34;k&#34;&gt;else&lt;/span&gt;
    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
        &lt;span class=&#34;n&#34;&gt;SetForegroundWindow&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hWnd&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;

    &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;IsIconic&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hWnd&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
        &lt;span class=&#34;n&#34;&gt;ShowWindowAsync&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hWnd&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;SW_RESTORE&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
    &lt;span class=&#34;k&#34;&gt;else&lt;/span&gt;
    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
        &lt;span class=&#34;n&#34;&gt;ShowWindowAsync&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hWnd&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;SW_SHOWNORMAL&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
      
    </item>
    
    <item>
      <title>Mac上pgsql备忘</title>
      <link>https://007slm.github.io/post/mac%E4%B8%8Apgsql%E5%A4%87%E5%BF%98/</link>
      <pubDate>Fri, 18 Jan 2019 10:11:55 +0800</pubDate>
      
      <guid>https://007slm.github.io/post/mac%E4%B8%8Apgsql%E5%A4%87%E5%BF%98/</guid>
      
        <description>

&lt;h2 id=&#34;pgsql-备忘&#34;&gt;pgsql 备忘&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;$ which pg_ctl
$ brew services list
$ brew services restart postgresql
$ brew services stop postgresql
$ brew services start postgresql&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;pgsql-存储位置&#34;&gt;pgsql 存储位置&lt;/h2&gt;

&lt;p&gt;pgsql -D 指定的目录下 base目录是存储的数据库数据&lt;/p&gt;
</description>
      
    </item>
    
    <item>
      <title>微信小程序支付坑</title>
      <link>https://007slm.github.io/post/%E5%BE%AE%E4%BF%A1%E6%94%AF%E4%BB%98%E5%9D%91/</link>
      <pubDate>Wed, 16 Jan 2019 11:30:16 +0800</pubDate>
      
      <guid>https://007slm.github.io/post/%E5%BE%AE%E4%BF%A1%E6%94%AF%E4%BB%98%E5%9D%91/</guid>
      
        <description>&lt;p&gt;##微信小程序支付坑：
首先：微信的支付 都是微信的端appid和微信商户号mch_id配对使用才能完成支付的。&lt;/p&gt;

&lt;p&gt;今天遇到的问题是：微信小程序支付在完成了文档中的所有步骤后，依然不能成功拉起支付现象如下：&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;https://i.imgur.com/PRlR6ygl.jpg?100x100&#34; alt=&#34;&#34; /&gt;&lt;/p&gt;

&lt;p&gt;原因如下：
因为商户是比小程序申请的早，虽然通过绑定已经完成小程序和商户的绑定 依然没有自动开通小程序支付。这是微信的bug。&lt;/p&gt;

&lt;p&gt;解决办法如下：
&lt;img src=&#34;https://i.imgur.com/SQ65ikvl.png&#34; alt=&#34;&#34; /&gt;
开通jsapi支付。&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;https://i.imgur.com/gfeJtnf.png&#34; alt=&#34;&#34; /&gt;&lt;/p&gt;
</description>
      
    </item>
    
    <item>
      <title>保险</title>
      <link>https://007slm.github.io/post/baoxian/</link>
      <pubDate>Tue, 15 Jan 2019 21:30:16 +0800</pubDate>
      
      <guid>https://007slm.github.io/post/baoxian/</guid>
      
        <description>

&lt;h2 id=&#34;程序员猝死-谁为你的过劳买单&#34;&gt;程序员猝死，谁为你的过劳买单？&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;猝死、过劳昏倒、腰椎病、脊椎病……加班过劳谁来买单？&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;保险。（讲讲怎么买对重疾险，干货！）&lt;/p&gt;

&lt;p&gt;社保大家都有，但在大病面前，发挥的作用还真有限。主要原因是大量的进口药都不在报销范围内，需要自费。&lt;/p&gt;

&lt;p&gt;如果是有家室的，可能还在考虑每月的定额支出问题，房贷、车贷还有生活费，想想还真觉得很焦虑。&lt;strong&gt;在熬夜加班犯困的时候，支撑着自己意志的，&lt;/strong&gt;&lt;strong&gt;不就是财务自由、让自己过上更好的日子，让工作不再是生存而是热爱？&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;所以，除了社保外，认真考虑一下商业保险是很有必要的，特别是重疾险，把重大疾病的风险损失口子先堵上，在真面临这些极端情况的时候，可以少一些后顾之忧。&lt;/p&gt;

&lt;p&gt;“&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;保险对于程序员而言，的确是刚需&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;”&lt;/p&gt;

&lt;p&gt;因此，今天想给大家分享一篇文章，来源于一位朋友圈的公众号。&lt;/p&gt;

&lt;p&gt;这篇文章不卖保险，也不讲虚的保险观念，就讲讲怎么买对重疾险，对于程序员或许有用。&lt;/p&gt;

&lt;p&gt;以下为转载文章部分：&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;程序员适合买啥保险？&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;程序员应该先找个老婆，然后让老婆来买。开个玩笑&lt;/p&gt;

&lt;p&gt;技术行业比较特殊，大部分人都需要加班，工作高负荷严重，一句赶着上线跟一句有Bug，就能要一个程序员的命。&lt;/p&gt;

&lt;p&gt;这也造成了很多程序员只盯着能保猝死的寿险看，&lt;strong&gt;但实际从人的年龄健康风险来讲，最需要关注的是重大疾病风险保障，也就是重疾险。&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;重疾险：不幸罹患重大疾病，保险公司赔偿一笔费用，供你自由支配。&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;——什么才能算重大疾病？&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;大陆保险行业2007年就有了明文规定：&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;https://007slm.github.io/image/zhongji.webp&#34; alt=&#34;&#34; /&gt;&lt;/p&gt;

&lt;p&gt;2007年以后，大陆卖出的所有重疾险保单，都包含了上面的25种高发重大疾病。&lt;/p&gt;

&lt;p&gt;（这份由中国保险行业协会和医师协会联合制定的规范，是大陆所有保险公司参照的标准，卖出的重疾险，重疾种类只能多不少。）&lt;/p&gt;

&lt;p&gt;这25种重疾，占重疾险理赔的 &lt;strong&gt;95%&lt;/strong&gt;以上，感受一下行业规定的高度和指导意义……&lt;/p&gt;

&lt;p&gt;——那，重疾险到底有多重要？&lt;/p&gt;

&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;所有人的保障体系中，它都必不可少。&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;一般情况下，只要入职一年以上，重疾险配置率100%。&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt;下面这四点，是重疾险配置思路。如果你还没买重疾险，建议仔细看看，一定会帮到你！&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;01&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;关键点一：保额50万起。&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;买重疾就是买保额，其它的都可以牺牲，保额不能少。&lt;/p&gt;

&lt;p&gt;预算再少，也不能低于30万，否则就没有意义。&lt;/p&gt;

&lt;p&gt;活在这个时代，很多重大疾病不是要命，而是要钱。&lt;/p&gt;

&lt;p&gt;前两天看到一张武大中南医院住院收据：61天，花费104万。&lt;/p&gt;

&lt;p&gt;保哥现在的重疾保额是120万，参考这个收据，保哥的保额才刚刚及格。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;02&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;关键点二&lt;/strong&gt;&lt;strong&gt;：必须买长期保障，一年期不靠谱。&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;市面上的重疾险，根据保障期限划分，一共三种：一年期、长期、终身。&lt;/p&gt;

&lt;p&gt;同样50万保额，长期重疾险几千块，一年期重疾险几百块。为什么不建议买一年期的？因为它不保证续保，而且不会一直这么便宜。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;先解释不保证续保：&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;目前，&lt;strong&gt;没有任何一款&lt;/strong&gt;一年期重疾险在合同中约定无条件续保。&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;一旦产品停售或因为身体原因被拒保，你就不能买了。&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;第二个问题：&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;一年期重疾不会一直很便宜。&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;因为是自然费率，保费随年龄变化而变化。&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;年轻人买起来很便宜，但年纪越大，保费就越贵了。（有多贵？产品部的同事测算过，一年期重疾买到70岁，&lt;strong&gt;总保费比长期重疾贵了30%以上。&lt;/strong&gt;）&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt;身边的同事，一般是这个节奏：&lt;/p&gt;

&lt;p&gt;刚毕业一两年的小年轻，没什么预算，很多选择保障至70岁。&lt;/p&gt;

&lt;p&gt;工作了几年，收入增长，成家立业，接触更多生老病死的案例，活的越来越不洒脱，纷纷买上了终身重疾险。&lt;/p&gt;

&lt;p&gt;总之，只买一年期，肯定不行。不想老了给孩子找负担，就尽量买个终身型的。暂时预算有限，先买到70岁，以后再补。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;03&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;关键点三&lt;/strong&gt;&lt;strong&gt;：多次赔付越来越有必要。&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;两个现象，让我觉得单次赔付不够用了：&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. 重大疾病不再是我们记忆里的“老年病”。&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;身边越来越多二三十岁年轻人身患重疾的故事。&lt;/p&gt;

&lt;p&gt;保哥自己的大学室友，就是在29岁得了淋巴癌。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. 很多重疾能治而且能治好。&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;医疗技术一直在进步，一些曾经看起来很可怕的癌症，不再是不治之症了。&lt;/p&gt;

&lt;p&gt;我们常听说的乳腺癌，现在的五年存活率是83.2%。&lt;/p&gt;

&lt;p&gt;多次赔付，可能是以后重疾险的常态了。保哥那个得了淋巴癌的同学，昨天还在我们的微信群里分享他给儿子做的新手工，像个再正常不过的年轻父亲。&lt;/p&gt;

&lt;p&gt;唯一不同的是，&lt;strong&gt;他得过重疾的身体，已经不能再去投保重疾险了&lt;/strong&gt;。&lt;/p&gt;

&lt;p&gt;以后大约50年的人生，他只能靠自己。&lt;/p&gt;

&lt;p&gt;所以，如果还没有买重疾险，保哥的建议是，直接买多次赔付的。&lt;/p&gt;

&lt;p&gt;虽然多次赔付性重疾险，比单次赔付的要贵30-50%。但这个钱对于以后几十年的人生，很值得。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;04&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;关键&lt;/strong&gt;&lt;strong&gt;点四：&lt;/strong&gt;&lt;strong&gt;轻症责任，很实用，该买就买。&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;轻症其实并不轻。&lt;/p&gt;

&lt;p&gt;简单来说，它是还没有发展成重大疾病的病；比如恶性肿瘤的早期阶段——原位癌。&lt;/p&gt;

&lt;p&gt;随着医学技术的进步和年度体检的普及，疾病检出率越来越高。很多肿瘤还处在原位癌状态时，就已经被检查出来了。&lt;/p&gt;

&lt;p&gt;轻症责任，“使用概率”挺高的。除了“使用概率高”，轻症责任还有个实用的隐藏彩蛋。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;罹患轻症后，后期保费不用交了，但保障还可以持续享有。&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;轻症责任，是对现代医学发展和个人健康管理需求的高阶适配，是一个真正用的上的保障。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;小 结&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;重疾险越是复杂，挑选的时候越是要把握关键点，化繁为简，总结起来&lt;/p&gt;

&lt;p&gt;1.保额50万起。&lt;/p&gt;

&lt;p&gt;2.必须是长期保障，一年期，不靠谱。&lt;/p&gt;

&lt;p&gt;3.多次赔付越来越有必要。&lt;/p&gt;

&lt;p&gt;4.轻症责任，很实用，该买就买。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;【作者介绍】&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;简毕业于山东大学财务专业，是个当之无愧的保险专业人士；先后在中资外资中外合资保险公司都干过，积累了大量的专业知识和实践经验。&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;https://007slm.github.io/image/jian.jpg&#34; alt=&#34;&#34; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;如果你正要了解保险，不妨加微信给您介绍一些看看!&lt;/strong&gt;&lt;/p&gt;
</description>
      
    </item>
    
    <item>
      <title>https连接提示pkix_path错误</title>
      <link>https://007slm.github.io/post/java%E8%BF%9E%E6%8E%A5https%E6%9C%8D%E5%8A%A1pkix-path%E9%94%99%E8%AF%AF/</link>
      <pubDate>Tue, 08 Jan 2019 11:30:16 +0800</pubDate>
      
      <guid>https://007slm.github.io/post/java%E8%BF%9E%E6%8E%A5https%E6%9C%8D%E5%8A%A1pkix-path%E9%94%99%E8%AF%AF/</guid>
      
        <description>

&lt;p&gt;关于java中用httpclient访问https服务报错&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;14
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;15
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;16
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;17
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;18
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;19
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;20
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;21
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;22
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;23
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;24
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;25
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;26
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;27
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;28
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;29
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;30
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;31
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;32
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;33
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span class=&#34;n&#34;&gt;javax&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;net&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;ssl&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;SSLHandshakeException&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sun&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;security&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;validator&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;ValidatorException&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;PKIX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;path&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;building&lt;/span&gt; &lt;span class=&#34;nl&#34;&gt;failed:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sun&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;security&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;provider&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;certpath&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;SunCertPathBuilderException&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;unable&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;to&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;find&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;valid&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;certification&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;path&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;to&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;requested&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;target&lt;/span&gt;  
&lt;span class=&#34;n&#34;&gt;at&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sun&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;security&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;ssl&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;Alerts&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;getSSLException&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Alerts&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;java&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;192&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;  
&lt;span class=&#34;n&#34;&gt;at&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sun&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;security&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;ssl&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;SSLSocketImpl&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;fatal&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;SSLSocketImpl&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;java&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;1949&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;  
&lt;span class=&#34;n&#34;&gt;at&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sun&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;security&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;ssl&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;Handshaker&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;fatalSE&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Handshaker&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;java&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;302&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;  
&lt;span class=&#34;n&#34;&gt;at&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sun&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;security&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;ssl&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;Handshaker&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;fatalSE&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Handshaker&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;java&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;296&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;  
&lt;span class=&#34;n&#34;&gt;at&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sun&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;security&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;ssl&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;ClientHandshaker&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;serverCertificate&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ClientHandshaker&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;java&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;1514&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;  
&lt;span class=&#34;n&#34;&gt;at&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sun&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;security&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;ssl&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;ClientHandshaker&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;processMessage&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ClientHandshaker&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;java&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;216&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;  
&lt;span class=&#34;n&#34;&gt;at&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sun&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;security&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;ssl&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;Handshaker&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;processLoop&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Handshaker&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;java&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;1026&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;  
&lt;span class=&#34;n&#34;&gt;at&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sun&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;security&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;ssl&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;Handshaker&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;process_record&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Handshaker&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;java&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;961&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;  
&lt;span class=&#34;n&#34;&gt;at&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sun&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;security&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;ssl&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;SSLSocketImpl&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;readRecord&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;SSLSocketImpl&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;java&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;1062&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;  
&lt;span class=&#34;n&#34;&gt;at&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sun&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;security&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;ssl&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;SSLSocketImpl&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;performInitialHandshake&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;SSLSocketImpl&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;java&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;1375&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;  
&lt;span class=&#34;n&#34;&gt;at&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sun&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;security&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;ssl&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;SSLSocketImpl&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;startHandshake&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;SSLSocketImpl&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;java&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;1403&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;  
&lt;span class=&#34;n&#34;&gt;at&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sun&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;security&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;ssl&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;SSLSocketImpl&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;startHandshake&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;SSLSocketImpl&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;java&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;1387&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;  
&lt;span class=&#34;n&#34;&gt;at&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sun&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;net&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;www&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;protocol&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;https&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;HttpsClient&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;afterConnect&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;HttpsClient&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;java&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;559&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;  
&lt;span class=&#34;n&#34;&gt;at&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sun&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;net&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;www&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;protocol&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;https&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;AbstractDelegateHttpsURLConnection&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;connect&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;AbstractDelegateHttpsURLConnection&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;java&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;185&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;  
&lt;span class=&#34;n&#34;&gt;at&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sun&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;net&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;www&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;protocol&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;https&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;HttpsURLConnectionImpl&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;connect&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;HttpsURLConnectionImpl&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;java&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;153&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;  
&lt;span class=&#34;n&#34;&gt;at&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;TestSecuredConnection&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;testConnectionTo&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;TestSecuredConnection&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;java&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;30&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;  
&lt;span class=&#34;n&#34;&gt;at&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;TestSecuredConnection&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;main&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;TestSecuredConnection&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;java&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;16&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;  
&lt;span class=&#34;n&#34;&gt;Caused&lt;/span&gt; &lt;span class=&#34;nl&#34;&gt;by:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sun&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;security&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;validator&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;ValidatorException&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;PKIX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;path&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;building&lt;/span&gt; &lt;span class=&#34;nl&#34;&gt;failed:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sun&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;security&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;provider&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;certpath&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;SunCertPathBuilderException&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;unable&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;to&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;find&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;valid&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;certification&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;path&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;to&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;requested&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;target&lt;/span&gt;  
&lt;span class=&#34;n&#34;&gt;at&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sun&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;security&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;validator&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;PKIXValidator&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;doBuild&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;PKIXValidator&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;java&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;387&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;  
&lt;span class=&#34;n&#34;&gt;at&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sun&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;security&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;validator&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;PKIXValidator&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;engineValidate&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;PKIXValidator&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;java&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;292&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;  
&lt;span class=&#34;n&#34;&gt;at&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sun&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;security&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;validator&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;Validator&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;validate&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Validator&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;java&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;260&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;  
&lt;span class=&#34;n&#34;&gt;at&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sun&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;security&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;ssl&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;X509TrustManagerImpl&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;validate&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;X509TrustManagerImpl&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;java&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;324&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;  
&lt;span class=&#34;n&#34;&gt;at&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sun&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;security&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;ssl&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;X509TrustManagerImpl&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;checkTrusted&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;X509TrustManagerImpl&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;java&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;229&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;  
&lt;span class=&#34;n&#34;&gt;at&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sun&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;security&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;ssl&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;X509TrustManagerImpl&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;checkServerTrusted&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;X509TrustManagerImpl&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;java&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;124&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;  
&lt;span class=&#34;n&#34;&gt;at&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sun&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;security&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;ssl&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;ClientHandshaker&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;serverCertificate&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ClientHandshaker&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;java&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;1496&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;  
&lt;span class=&#34;o&#34;&gt;...&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;12&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;more&lt;/span&gt;  
&lt;span class=&#34;n&#34;&gt;Caused&lt;/span&gt; &lt;span class=&#34;nl&#34;&gt;by:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sun&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;security&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;provider&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;certpath&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;SunCertPathBuilderException&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;unable&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;to&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;find&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;valid&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;certification&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;path&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;to&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;requested&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;target&lt;/span&gt;  
&lt;span class=&#34;n&#34;&gt;at&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sun&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;security&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;provider&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;certpath&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;SunCertPathBuilder&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;build&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;SunCertPathBuilder&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;java&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;141&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;  
&lt;span class=&#34;n&#34;&gt;at&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sun&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;security&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;provider&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;certpath&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;SunCertPathBuilder&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;engineBuild&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;SunCertPathBuilder&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;java&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;126&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;  
&lt;span class=&#34;n&#34;&gt;at&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;java&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;security&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;cert&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;CertPathBuilder&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;build&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;CertPathBuilder&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;java&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;280&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;  
&lt;span class=&#34;n&#34;&gt;at&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sun&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;security&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;validator&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;PKIXValidator&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;doBuild&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;PKIXValidator&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;java&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;382&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;  
&lt;span class=&#34;o&#34;&gt;...&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;18&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;more&lt;/span&gt;  &lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;主要看这一句，是说没有找到的指定的证书。&lt;/p&gt;

&lt;p&gt;我们知道ssl握手是又服务端返回证书信息，客户端进行校验，这里有个隐藏的规则，因为证书是链式签发的&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;root ca&amp;ndash;&amp;gt;一级ca -—&amp;gt;二级ca &amp;ndash;&amp;gt;我的网站&lt;/strong&gt;&lt;/p&gt;

&lt;h4 id=&#34;问题1&#34;&gt;问题1&lt;/h4&gt;

&lt;p&gt;很多用户在部署证书的时候都只部署了自己的证书，这就造成浏览器一般会把受信任的证书补全，类似curl，httpclient等工具会利用操作系统本地的cert列表 eg：/etc/local/cert 来补全公信的证书，某些时候如果操作系统的cert不全或者java的security\cacert里面没有添加公信ca就会出现问题了。（不同版本的jre带的cacert可能会不一样，所以同样的代码 有些环境就不报错）&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;&lt;br /&gt;
&lt;strong&gt;微信小程序在中级证书没有部署的情况下，是会ssl握手失败的，和java一样的机制，本质是android中java握手失败。但是浏览器却完全正常。&lt;/strong&gt;
报错日志为：2019-1-9 17:19:52 [log] wx.request fail callback with msg request:fail ssl hand shake error with seq 0&lt;/p&gt;

&lt;h4 id=&#34;解决办法&#34;&gt;解决办法：&lt;/h4&gt;

&lt;p&gt;服务器部署证书的时候部署全证书链，如下图即为典型的没有添加全证书链&lt;/p&gt;

&lt;p&gt;通过myssl校验证书信息&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;https://i.imgur.com/CESb3vS.png&#34; alt=&#34;enter image description here&#34; /&gt;&lt;br /&gt;
在kong的certificate中补全证书链信息后就正常了 用java验证也通过：&lt;br /&gt;
验证代码：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;14
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;15
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;16
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;17
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;18
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span class=&#34;kd&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;testConnectionTo&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;String&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;aURL&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;kd&#34;&gt;throws&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Exception&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;  
&lt;span class=&#34;n&#34;&gt;URL&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;destinationURL&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;new&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;URL&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;aURL&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;);&lt;/span&gt;  
&lt;span class=&#34;n&#34;&gt;HttpsURLConnection&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;conn&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;HttpsURLConnection&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;destinationURL&lt;/span&gt;  
&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;openConnection&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;();&lt;/span&gt;  
&lt;span class=&#34;n&#34;&gt;conn&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;connect&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;();&lt;/span&gt;  
&lt;span class=&#34;n&#34;&gt;Certificate&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;certs&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;conn&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;getServerCertificates&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;();&lt;/span&gt;  
&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Certificate&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cert&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;certs&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;  
&lt;span class=&#34;n&#34;&gt;System&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;out&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;println&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;Certificate is: &amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cert&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;);&lt;/span&gt;  
&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cert&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;instanceof&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;X509Certificate&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;  
&lt;span class=&#34;k&#34;&gt;try&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;  
&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;X509Certificate&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cert&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;).&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;checkValidity&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;();&lt;/span&gt;  
&lt;span class=&#34;n&#34;&gt;System&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;out&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;println&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;Certificate is active for current date&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;);&lt;/span&gt;  
&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;catch&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;CertificateExpiredException&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cee&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;  
&lt;span class=&#34;n&#34;&gt;System&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;out&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;println&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;Certificate is expired&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;);&lt;/span&gt;  
&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;  
&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;  
&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;  
&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;  &lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;结果：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]:&lt;/span&gt; &lt;span class=&#34;nl&#34;&gt;ObjectId:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;6&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;7&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;1&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Criticality&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;false&lt;/span&gt;  
&lt;span class=&#34;n&#34;&gt;AuthorityInfoAccess&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;  
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;  &lt;span class=&#34;nl&#34;&gt;
&lt;/span&gt;&lt;span class=&#34;nl&#34;&gt;accessMethod:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ocsp&lt;/span&gt;  &lt;span class=&#34;nl&#34;&gt;
&lt;/span&gt;&lt;span class=&#34;nl&#34;&gt;accessLocation:&lt;/span&gt; &lt;span class=&#34;nl&#34;&gt;URIName:&lt;/span&gt; &lt;span class=&#34;nl&#34;&gt;http:&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;//ocsp2.digicert.com  
&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;,&lt;/span&gt;  &lt;span class=&#34;nl&#34;&gt;
&lt;/span&gt;&lt;span class=&#34;nl&#34;&gt;accessMethod:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;caIssuers&lt;/span&gt;  &lt;span class=&#34;nl&#34;&gt;
&lt;/span&gt;&lt;span class=&#34;nl&#34;&gt;accessLocation:&lt;/span&gt; &lt;span class=&#34;nl&#34;&gt;URIName:&lt;/span&gt; &lt;span class=&#34;nl&#34;&gt;http:&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;//cacerts.digitalcertvalidation.com/TrustAsiaTLSRSACA.crt  
&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;  
&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;  
  &lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;问题2&#34;&gt;问题2&lt;/h3&gt;

&lt;p&gt;java中默认采用的cacert中没有对应的证书供应商的证书问题，需要导出证书文件才可以通过，推荐java中忽略ssl验证。&lt;/p&gt;

&lt;h3 id=&#34;备注&#34;&gt;备注&lt;/h3&gt;

&lt;p&gt;java中默认请求https时候回失败，是因为默认java类库开启了ssl握手的校验，nginx中默认连接ssl的时候总是成功是默认没有校验证书&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-nginx&#34; data-lang=&#34;nginx&#34;&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;7
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-nginx&#34; data-lang=&#34;nginx&#34;&gt;  
&lt;span class=&#34;k&#34;&gt;Syntax:&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;proxy_ssl_verify&lt;/span&gt; &lt;span class=&#34;no&#34;&gt;on&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;|&lt;/span&gt; &lt;span class=&#34;no&#34;&gt;off&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;  
&lt;span class=&#34;k&#34;&gt;Default:&lt;/span&gt;  
&lt;span class=&#34;s&#34;&gt;proxy_ssl_verify&lt;/span&gt; &lt;span class=&#34;no&#34;&gt;off&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;  
&lt;span class=&#34;k&#34;&gt;Context:&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;http,&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;server,&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;location&lt;/span&gt;  
&lt;span class=&#34;s&#34;&gt;This&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;directive&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;appeared&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;version&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;.7.0.&lt;/span&gt;  
  &lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Enables or disables verification of the proxied HTTPS server certificate.&lt;/p&gt;
</description>
      
    </item>
    
    <item>
      <title>antlr备忘</title>
      <link>https://007slm.github.io/post/antlr/</link>
      <pubDate>Fri, 26 Oct 2018 11:30:16 +0800</pubDate>
      
      <guid>https://007slm.github.io/post/antlr/</guid>
      
        <description>

&lt;h3 id=&#34;antlr-备忘&#34;&gt;antlr 备忘&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;enter every rule&lt;/li&gt;
&lt;li&gt;enter expression&lt;/li&gt;
&lt;li&gt;exit expression&lt;/li&gt;
&lt;li&gt;exit every rule&lt;/li&gt;
&lt;/ul&gt;
</description>
      
    </item>
    
    <item>
      <title>git常用命令</title>
      <link>https://007slm.github.io/post/git%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4/</link>
      <pubDate>Thu, 18 Oct 2018 11:30:16 +0800</pubDate>
      
      <guid>https://007slm.github.io/post/git%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4/</guid>
      
        <description>

&lt;h3 id=&#34;创建新的github仓库&#34;&gt;创建新的github仓库&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;git init&lt;/li&gt;
&lt;li&gt;git add README.md&lt;/li&gt;
&lt;li&gt;git commit -m &amp;ldquo;readme.md&amp;rdquo;&lt;/li&gt;
&lt;li&gt;git remote add origin &lt;a href=&#34;https://github.com/lonelyc/MyRepo.git&#34;&gt;https://github.com/lonelyc/MyRepo.git&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;git push -u origin master&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&#34;在新的仓库中创建分支&#34;&gt;在新的仓库中创建分支&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;获取远程分支列表 git branch -r&lt;/li&gt;
&lt;li&gt;在本地创建新的分支 git branch newbranch&lt;/li&gt;
&lt;li&gt;切换到新的分支 git checkout newbranch&lt;/li&gt;
&lt;li&gt;将新的分支推送到github git push origin newbranch&lt;/li&gt;
&lt;li&gt;在本地删除一个分支： git branch -d newbranch&lt;/li&gt;
&lt;li&gt;在github远程端删除一个分支： git push origin :newbranch (分支名前的冒号代表删除)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&#34;直接使用git-pull和git-push的设置&#34;&gt;直接使用git pull和git push的设置&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;git branch &amp;ndash;set-upstream-to=origin/master master&lt;/li&gt;
&lt;li&gt;git branch &amp;ndash;set-upstream-to=origin/ThirdParty ThirdParty&lt;/li&gt;
&lt;li&gt;git config &amp;ndash;global push.default matching&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&#34;github-收到dns污染加速方案-hosts中添加&#34;&gt;github 收到dns污染加速方案 hosts中添加&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;192.30.253.112 github.com&lt;/li&gt;
&lt;li&gt;151.101.72.249 github.global.ssl.fastly.net&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&#34;本地修改了许多文件-其中有些是新增的-因为开发需要这些都不要了-想要丢弃掉-可以使用如下命令&#34;&gt;本地修改了许多文件，其中有些是新增的，因为开发需要这些都不要了，想要丢弃掉，可以使用如下命令：&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;git checkout . #本地所有修改的。没有的提交的，都返回到原来的状态&lt;/li&gt;
&lt;li&gt;git stash #把所有没有提交的修改暂存到stash里面。可用git stash pop回复。&lt;/li&gt;
&lt;li&gt;git reset --hard HASH #返回到某个节点，不保留修改。&lt;/li&gt;

&lt;li&gt;&lt;p&gt;git reset --soft HASH #返回到某个节点。保留修改&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;git clean -df #返回到某个节点&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;git clean 参数
-n 显示 将要 删除的 文件 和  目录
-f 删除 文件
-df 删除 文件 和 目录12345678910&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;也可以使用：
- git checkout . &amp;amp;&amp;amp; git clean -xdf&lt;/p&gt;
</description>
      
    </item>
    
    <item>
      <title>k8s常用命令</title>
      <link>https://007slm.github.io/post/k8s%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4/</link>
      <pubDate>Thu, 18 Oct 2018 11:30:16 +0800</pubDate>
      
      <guid>https://007slm.github.io/post/k8s%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4/</guid>
      
        <description>

&lt;h4 id=&#34;获取namespace为-console-的pod列表&#34;&gt;获取namespace为 console 的pod列表&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;kubectl get po -n console&lt;/p&gt;

&lt;p&gt;namespace console
container 为gateway
pod id 为console-deploy-7d9dc9f8c5-2lgtc&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;kubectl exec -it console-deploy-7d9dc9f8c5-2lgtc -c gateway -n console /bin/bash&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
      
    </item>
    
    <item>
      <title>关于后端进度条的实现</title>
      <link>https://007slm.github.io/post/%E5%90%8E%E7%AB%AF%E5%88%86%E7%89%87%E6%95%B0%E6%8D%AE%E4%BC%A0%E8%BE%93%E5%AE%9E%E7%8E%B0%E8%BF%9B%E5%BA%A6%E6%9D%A1%E8%83%BD%E5%8A%9B/</link>
      <pubDate>Tue, 09 Oct 2018 11:30:16 +0800</pubDate>
      
      <guid>https://007slm.github.io/post/%E5%90%8E%E7%AB%AF%E5%88%86%E7%89%87%E6%95%B0%E6%8D%AE%E4%BC%A0%E8%BE%93%E5%AE%9E%E7%8E%B0%E8%BF%9B%E5%BA%A6%E6%9D%A1%E8%83%BD%E5%8A%9B/</guid>
      
        <description>

&lt;h2 id=&#34;关于后端进度条的实现&#34;&gt;关于后端进度条的实现&lt;/h2&gt;

&lt;h4 id=&#34;java代码部分&#34;&gt;java代码部分&lt;/h4&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre class=&#34;chroma&#34;&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;9
&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre class=&#34;chroma&#34;&gt;for (int i =0;i&amp;lt;10;i++) {
    try {
        TimeUnit.SECONDS.sleep(1);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    writer.print(i);
    writer.flush();
}&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;重点写一个trunk后要及时flush&lt;/p&gt;

&lt;h4 id=&#34;js部分&#34;&gt;js部分&lt;/h4&gt;

&lt;p&gt;得益于fetch api中关于getReader的能力 可以让我们及时读取每个分片（trunk）的数据&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre class=&#34;chroma&#34;&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;14
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;15
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;16
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;17
&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre class=&#34;chroma&#34;&gt;fetch(require.toUrl(&amp;#34;$UI/demo/mock.j&amp;#34;)).then(function (response) {
    let reader = response.body.getReader();
    let decoder = new TextDecoder();
    return readData();
    function readData() {
        return reader.read().then(function (data) {
            var value = data.value,done = data.done;
            value = new TextDecoder(&amp;#34;utf-8&amp;#34;).decode(value);
            console.log(value);
            if (done) {
                console.log(&amp;#39;Stream complete&amp;#39;);
                return;
            }
            return readData();
        });
    }
});&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h4 id=&#34;效果如下&#34;&gt;效果如下：&lt;/h4&gt;

&lt;p&gt;&lt;img src=&#34;https://i.imgur.com/7KDeGT7.gif&#34; alt=&#34;&#34; /&gt;&lt;/p&gt;
</description>
      
    </item>
    
    <item>
      <title>nginx日志重新挂载</title>
      <link>https://007slm.github.io/post/nginx%E6%97%A5%E5%BF%97/</link>
      <pubDate>Fri, 14 Sep 2018 11:30:16 +0800</pubDate>
      
      <guid>https://007slm.github.io/post/nginx%E6%97%A5%E5%BF%97/</guid>
      
        <description>&lt;p&gt;先移动日志文件&lt;/p&gt;

&lt;p&gt;mv /usr/local/openresty/nginx/logs/access.log /usr/local/openresty/nginx/logs/access.log.20161024&lt;/p&gt;

&lt;p&gt;发送信号重新打开日志文件&lt;/p&gt;

&lt;p&gt;kill -USR1 $(cat /usr/local/openresty/nginx/logs/nginx.pid)&lt;/p&gt;

&lt;p&gt;简单说明一下：&lt;/p&gt;

&lt;p&gt;1、在没有执行kill -USR1 &lt;code&gt;cat ${pid_path}&lt;/code&gt;之前，即便已经对文件执行了mv命令也只是改变了文件的名称，nginx还是会向新命名的文件” access.log.20161024”中照常写入日志数据。原因在于linux系统中，内核是根据文件描述符来找文件的&lt;/p&gt;

&lt;p&gt;2、USR1是自定义信号，也就是进程编写者自己确定收到这个信号该干什么。而在nginx中它自己编写了代码当接到USR1信号的时候让nginx重新打开日志文件（重新打开的日志就是配置文件中设置的位置和名称）&lt;/p&gt;
</description>
      
    </item>
    
    <item>
      <title>ngxin日志数据查询</title>
      <link>https://007slm.github.io/post/nginx%E6%97%A5%E5%BF%97%E5%88%86%E6%9E%90/</link>
      <pubDate>Fri, 14 Sep 2018 11:30:16 +0800</pubDate>
      
      <guid>https://007slm.github.io/post/nginx%E6%97%A5%E5%BF%97%E5%88%86%E6%9E%90/</guid>
      
        <description>&lt;ul&gt;
&lt;li&gt;&lt;p&gt;查看时间最长的前300个请求
sed  -e &amp;rsquo;s/&amp;ldquo;//g&amp;rsquo; -e &amp;rsquo;s/?.*$//g&amp;rsquo; access.log | awk &amp;lsquo;{print $6,$1,$2,$3,$4,$5,$6,$10,$11,$12,$13,$14,$15,$16,$20}&amp;rsquo; | sort -rn |grep -v websocket|grep -v qrcodeLogin|grep -v wxEvent|grep -v wxevent| head -n 300&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;最后30000条记录 请求时间排序
tail -n 30000 access.log | sed  -e &amp;rsquo;s/&amp;ldquo;//g&amp;rsquo; -e &amp;rsquo;s/?.*$//g&amp;rsquo; | grep 20/Nov/2018 | awk &amp;lsquo;{print $10,$1,$2,$3,$4,$5,$6,$10,$11,$12,$13,$14,$15,$16,$20}&amp;rsquo; | sort -rn |awk &amp;lsquo;{print $7,$1,$2,$3,$4,$5,$6,$10,$11,$12,$13,$14,$15,$16,$20}&amp;rsquo; | sort -rn |grep -v websocket|grep -v qrcodeLogin|grep -v wxEvent|grep -v wxevent| head -n 500&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&#34;http://k.justep.com/?controller=FileViewerController&amp;amp;action=image&amp;amp;file_id=5509&amp;amp;project_id=301&amp;amp;task_id=18850&#34; alt=&#34;&#34; /&gt;&lt;/p&gt;
</description>
      
    </item>
    
    <item>
      <title>博客发文流程</title>
      <link>https://007slm.github.io/post/%E5%8D%9A%E5%AE%A2%E5%8F%91%E6%96%87%E6%B5%81%E7%A8%8B/</link>
      <pubDate>Fri, 14 Sep 2018 11:30:16 +0800</pubDate>
      
      <guid>https://007slm.github.io/post/%E5%8D%9A%E5%AE%A2%E5%8F%91%E6%96%87%E6%B5%81%E7%A8%8B/</guid>
      
        <description>&lt;p&gt;cd g:\hugo\blog
本地查看效果
hugo server &amp;ndash;buildDrafts
编译发布
hugo &amp;ndash;baseUrl=&amp;ldquo;&lt;a href=&#34;https://007slm.github.io/&#34;&gt;https://007slm.github.io/&lt;/a&gt;
git 提交&lt;/p&gt;
</description>
      
    </item>
    
    <item>
      <title>微信体系梳理</title>
      <link>https://007slm.github.io/post/%E5%BE%AE%E4%BF%A1%E4%BD%93%E7%B3%BB%E6%A2%B3%E7%90%86/</link>
      <pubDate>Fri, 14 Sep 2018 10:43:33 +0800</pubDate>
      
      <guid>https://007slm.github.io/post/%E5%BE%AE%E4%BF%A1%E4%BD%93%E7%B3%BB%E6%A2%B3%E7%90%86/</guid>
      
        <description>

&lt;h2 id=&#34;微信体系梳理&#34;&gt;微信体系梳理&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;微信开放平台是微信体系的总称&lt;/strong&gt;
open.weixin.com
下面包含
- 网站应用  web
- 移动应用 app
- 公众账号  对应公众平台（也就是公众号）
- 第三方平台 一般来说是帮助用户运行公众号的的&lt;/p&gt;

&lt;h3 id=&#34;公众账号-叫做公众平台-公众号是个总称&#34;&gt;公众账号  叫做公众平台  公众号是个总称&lt;/h3&gt;

&lt;p&gt;mp.weixin.com
里面包含
- 订阅号  &amp;ndash;天天发文章的那种  一天一篇群发消息限制
- 服务号 –类似招行银行信用卡 为公众提供服务的  一个月4篇群发消息限制
- 企业号（后来改名为企业微信）  &amp;ndash; 需要先邀请用户才能参与的 适用用企业内部适用
- 小程序 –为了解决服务号的网页在浏览器中性能卡顿而出的一种专门解决技术问题的公众号类型。&lt;br /&gt;
    一次支付行为可以可以下发3条消息
    一次form提交行为可以在7天内发送1条消息&lt;/p&gt;
</description>
      
    </item>
    
    <item>
      <title>nginx &#43; openresty 备忘</title>
      <link>https://007slm.github.io/post/openresty%E7%9B%B8%E5%85%B3/</link>
      <pubDate>Sun, 09 Sep 2018 11:30:16 +0800</pubDate>
      
      <guid>https://007slm.github.io/post/openresty%E7%9B%B8%E5%85%B3/</guid>
      
        <description>

&lt;h3 id=&#34;nginx-openresty-备忘&#34;&gt;nginx + openresty 备忘&lt;/h3&gt;

&lt;p&gt;nginx的开发者提供了一种简单、粗暴的方式来实现日志文件的切换。来自官网的一篇文章Log Rotation介绍了这种方法，核心脚本如下：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre class=&#34;chroma&#34;&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre class=&#34;chroma&#34;&gt;mv access.log access.log.0
kill -USR1 `cat master.nginx.pid`
sleep 1# 
do something with access.log.0
gzip access.log.0&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr /&gt;

&lt;h3 id=&#34;nginx指令&#34;&gt;nginx指令&lt;/h3&gt;

&lt;p&gt;set_header 设置response header
proxy_set_header 设置request header&lt;/p&gt;

&lt;p&gt;openresty&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;request部分&lt;/strong&gt;
header赋值
ngx.req.set_header(&amp;lsquo;X-Credential-Username&amp;rsquo;, username);
header取值
local headers = ngx.req.get_headers();
headers[&amp;ldquo;X-Credential-Username&amp;rdquo;];
&lt;strong&gt;response部分&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Reading ngx.header.HEADER will return the value of the response header named HEADER.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ngx.var.VARIABLE&lt;/strong&gt;
Read and write Nginx variable values.
Note that only already defined nginx variables can be written to. For example:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre class=&#34;chroma&#34;&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;7
&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre class=&#34;chroma&#34;&gt; location /foo {
     set $my_var &amp;#39;&amp;#39;; # this line is required to create $my_var at config time
     content_by_lua_block {
         ngx.var.my_var = 123;
         ...
     }
 }&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h1 id=&#34;使用-nginx-内置绑定变量&#34;&gt;使用 Nginx 内置绑定变量&lt;/h1&gt;

&lt;p&gt;&lt;code&gt;Nginx&lt;/code&gt;作为一个成熟、久经考验的负载均衡软件，与其提供丰富、完整的内置变量是分不开的，它极大增加了对&lt;code&gt;Nginx&lt;/code&gt;网络行为的控制细度。这些变量大部分都是在请求进入时解析的，并把他们缓存到请求&lt;code&gt;cycle&lt;/code&gt;中，方便下一次获取使用。首先来看看&lt;code&gt;Nginx&lt;/code&gt;对都开放了那些&lt;code&gt;API&lt;/code&gt;。&lt;/p&gt;

&lt;p&gt;参看下表：&lt;/p&gt;

&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;名称&lt;/th&gt;
&lt;th&gt;说明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;

&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;$arg_name&lt;/td&gt;
&lt;td&gt;请求中的name参数&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;$args&lt;/td&gt;
&lt;td&gt;请求中的参数&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;$binary_remote_addr&lt;/td&gt;
&lt;td&gt;远程地址的二进制表示&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;$body_bytes_sent&lt;/td&gt;
&lt;td&gt;已发送的消息体字节数&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;$content_length&lt;/td&gt;
&lt;td&gt;HTTP请求信息里的&amp;rdquo;Content-Length&amp;rdquo;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;$content_type&lt;/td&gt;
&lt;td&gt;请求信息里的&amp;rdquo;Content-Type&amp;rdquo;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;$document_root&lt;/td&gt;
&lt;td&gt;针对当前请求的根路径设置值&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;$document_uri&lt;/td&gt;
&lt;td&gt;与$uri相同; 比如 /test2/test.php&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;$host&lt;/td&gt;
&lt;td&gt;请求信息中的&amp;rdquo;Host&amp;rdquo;，如果请求中没有Host行，则等于设置的服务器名&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;$hostname&lt;/td&gt;
&lt;td&gt;机器名使用 gethostname系统调用的值&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;$http_cookie&lt;/td&gt;
&lt;td&gt;cookie 信息&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;$http_referer&lt;/td&gt;
&lt;td&gt;引用地址&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;$http_user_agent&lt;/td&gt;
&lt;td&gt;客户端代理信息&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;$http_via&lt;/td&gt;
&lt;td&gt;最后一个访问服务器的Ip地址。&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;$http_x_forwarded_for&lt;/td&gt;
&lt;td&gt;相当于网络访问路径&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;$is_args&lt;/td&gt;
&lt;td&gt;如果请求行带有参数，返回“?”，否则返回空字符串&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;$limit_rate&lt;/td&gt;
&lt;td&gt;对连接速率的限制&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;$nginx_version&lt;/td&gt;
&lt;td&gt;当前运行的nginx版本号&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;$pid&lt;/td&gt;
&lt;td&gt;worker进程的PID&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;$query_string&lt;/td&gt;
&lt;td&gt;与$args相同&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;$realpath_root&lt;/td&gt;
&lt;td&gt;按root指令或alias指令算出的当前请求的绝对路径。其中的符号链接都会解析成真是文件路径&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;$remote_addr&lt;/td&gt;
&lt;td&gt;客户端IP地址&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;$remote_port&lt;/td&gt;
&lt;td&gt;客户端端口号&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;$remote_user&lt;/td&gt;
&lt;td&gt;客户端用户名，认证用&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;$request&lt;/td&gt;
&lt;td&gt;用户请求&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;$request_body&lt;/td&gt;
&lt;td&gt;这个变量（0.7.58+）包含请求的主要信息。在使用proxy_pass或fastcgi_pass指令的location中比较有意义&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;$request_body_file&lt;/td&gt;
&lt;td&gt;客户端请求主体信息的临时文件名&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;$request_completion&lt;/td&gt;
&lt;td&gt;如果请求成功，设为&amp;rdquo;OK&amp;rdquo;；如果请求未完成或者不是一系列请求中最后一部分则设为空&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;$request_filename&lt;/td&gt;
&lt;td&gt;当前请求的文件路径名，比如/opt/nginx/www/test.php&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;$request_method&lt;/td&gt;
&lt;td&gt;请求的方法，比如&amp;rdquo;GET&amp;rdquo;、&amp;rdquo;POST&amp;rdquo;等&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;$request_uri&lt;/td&gt;
&lt;td&gt;请求的URI，带参数&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;$scheme&lt;/td&gt;
&lt;td&gt;所用的协议，比如http或者是https&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;$server_addr&lt;/td&gt;
&lt;td&gt;服务器地址，如果没有用listen指明服务器地址，使用这个变量将发起一次系统调用以取得地址(造成资源浪费)&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;$server_name&lt;/td&gt;
&lt;td&gt;请求到达的服务器名&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;$server_port&lt;/td&gt;
&lt;td&gt;请求到达的服务器端口号&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;$server_protocol&lt;/td&gt;
&lt;td&gt;请求的协议版本，&amp;rdquo;HTTP/1.0&amp;rdquo;或&amp;rdquo;HTTP/1.1&amp;rdquo;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;$uri&lt;/td&gt;
&lt;td&gt;请求的URI，可能和最初的值有不同，比如经过重定向之类的&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;其实这还不是全部，&lt;code&gt;Nginx&lt;/code&gt;在不停迭代更新是一个原因，还有一个是有些变量太冷门，借助它们，会有很多玩法。&lt;/p&gt;

&lt;p&gt;首先，在&lt;code&gt;OpenResty&lt;/code&gt;中如何引用这些变量呢？参考 &lt;a href=&#34;https://github.com/openresty/lua-nginx-module#ngxvarvariable&#34;&gt;ngx.var.VARIABLE&lt;/a&gt; 小节。&lt;/p&gt;

&lt;p&gt;利用这些内置变量，来做一个简单的数学求和运算例子：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-nginx&#34; data-lang=&#34;nginx&#34;&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-nginx&#34; data-lang=&#34;nginx&#34;&gt;    &lt;span class=&#34;k&#34;&gt;server&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
        &lt;span class=&#34;kn&#34;&gt;listen&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;80&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
        &lt;span class=&#34;kn&#34;&gt;server_name&lt;/span&gt;  &lt;span class=&#34;s&#34;&gt;localhost&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;

        &lt;span class=&#34;kn&#34;&gt;location&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;/sum&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
            &lt;span class=&#34;c1&#34;&gt;#处理业务
&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;           &lt;span class=&#34;kn&#34;&gt;content_by_lua_block&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
                &lt;span class=&#34;kn&#34;&gt;local&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;a&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;tonumber(ngx.var.arg_a)&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;or&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;
                &lt;span class=&#34;s&#34;&gt;local&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;b&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;tonumber(ngx.var.arg_b)&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;or&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;
                &lt;span class=&#34;s&#34;&gt;ngx.say(&amp;#34;sum:&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;,&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;a&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;b&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;)&lt;/span&gt;
            &lt;span class=&#34;err&#34;&gt;}&lt;/span&gt;
        &lt;span class=&#34;err&#34;&gt;}&lt;/span&gt;
    &lt;span class=&#34;err&#34;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;验证一下：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;➜  ~  curl &lt;span class=&#34;s1&#34;&gt;&amp;#39;http://127.0.0.1/sum?a=11&amp;amp;b=12&amp;#39;&lt;/span&gt;
sum: &lt;span class=&#34;m&#34;&gt;23&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;特别注意&lt;/strong&gt;
access_by_lua_content阶段取不到location中通过proxy_set_header设置的值&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;img src=&#34;http://static.zybuluo.com/yishuailuo/1ur8ovkz7n5n36ojwas0t45l/image.png&#34; alt=&#34;&#34; /&gt;&lt;/p&gt;

&lt;p&gt;ngx.header.HEADER
syntax: ngx.header.HEADER = VALUE&lt;/p&gt;

&lt;p&gt;syntax: value = ngx.header.HEADER&lt;/p&gt;

&lt;p&gt;context: rewrite_by_lua&lt;em&gt;, access_by_lua&lt;/em&gt;, content_by_lua&lt;em&gt;, header_filter_by_lua&lt;/em&gt;, body_filter_by_lua&lt;em&gt;, log_by_lua&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Set, add to, or clear the current request&amp;rsquo;s HEADER response header that is to be sent.&lt;/p&gt;

&lt;p&gt;获取header值和赋值&lt;/p&gt;

&lt;p&gt;&amp;ndash; equivalent to ngx.header[&amp;ldquo;Content-Type&amp;rdquo;] = &amp;lsquo;text/plain&amp;rsquo;
 ngx.header.content_type = &amp;lsquo;text/plain&amp;rsquo;;&lt;/p&gt;

&lt;p&gt;ngx.header[&amp;ldquo;X-My-Header&amp;rdquo;] = &amp;lsquo;blah blah&amp;rsquo;;&lt;/p&gt;
</description>
      
    </item>
    
    <item>
      <title>多线程</title>
      <link>https://007slm.github.io/post/%E5%A4%9A%E7%BA%BF%E7%A8%8B/</link>
      <pubDate>Sun, 19 Nov 2017 11:30:16 +0800</pubDate>
      
      <guid>https://007slm.github.io/post/%E5%A4%9A%E7%BA%BF%E7%A8%8B/</guid>
      
        <description>&lt;ul&gt;
&lt;li&gt;一个对象一把锁  static上加sync 代表类锁&lt;/li&gt;
&lt;li&gt;脏读问题 （数据库一致性）&lt;/li&gt;
&lt;li&gt;volatile 是变量在多个线程间可见&lt;/li&gt;
&lt;/ul&gt;
</description>
      
    </item>
    
  </channel>
</rss>