0%

背景

假设有这样一个产品,一个web和一个winform客户端,在客户在web的网页上面点击启动客户端来处理,这个时候开始调用本地的客户端,来完成指定的工作。这种场景在日常的上网中也比较常见,如使用迅雷下载。当然实现的方式也有很多种,今天我来演示一种用监控Http请求来实现这个功能,思路如下:

jsApp

HttpListener

对于上面的分析,最重要的功能虽实现对Http的监控,而.net中已经封装了我们的需求,下面看下如何具体的实现:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
static void Main(string[] args)
{
HttpListener listerner = new HttpListener();

try
{
listerner.AuthenticationSchemes = AuthenticationSchemes.Anonymous;//指定身份验证 Anonymous匿名访问
listerner.Prefixes.Add("http://localhost:8080/Service/");
listerner.Start();
}
catch (Exception ex)
{
Console.WriteLine("无法启动监视:" + ex.Message);
}

Task.Factory.StartNew(() => //使用一个线程对监听
{
while (true)
{
HttpListenerContext ctx = listerner.GetContext();
Task.Factory.StartNew(TaskProc, ctx);//回调函数,开启新线程进行调用,不影响下次监听
}
});

Console.ReadKey();
}


实现请求的响应

现在我们可以拿到请求的上下文的信息ctx,先定义一个参数的格式,简单的定义如下:

1
2
3
4
5
6
7
8
public class ReciveInfo
{
public string path { get; set; }//应用程序所在的路径

public string name { get; set; }//应用程序名称
}


下面对ctx的Response数据进行填写.

阅读全文 »

win10碰到的问题

win10 自带的Hyper与Vmare冲突,使用控制面板去除Hyper之后,win10会自动更新把Hyper又重新安装上了。。。经历几次折腾最终还是不行。原因:Hyper-V后VMware都要独占基于CPU等底层硬件的 Hypervisor才能运行,所以二者不能在同一台电脑中同时运行

修改启动项

  1. 以管理员身份运行命令提示符

  2. 在命令提示符窗口中输入以下命令

    
        bcdedit /copy {current} /d "Windows 10 (关闭 Hyper-V)"
    

运行后会提示你已经创建了另外一个启动菜单项,记下 { } 中的那串代码。

  1. 然后继续输入并运行以下命令

    
       bcdedit /set {你记下的那串代码} hypervisorlaunchtype OFF
    

在启动的时候选择”Windows 10 (关闭 Hyper-V)” 这个启动选项就可以使用Vmare了

阅读全文 »

菜鸟裹裹{:target=”_blank”}是阿里旗下的一个物流数据的整合平台,数据准确、及时.前几天在关注菜鸟和顺丰的争端,因为在前一天我刚刚爬到菜鸟上面的快递数据,第二天看到二者出现了摩擦,在菜鸟上面已经查不到顺丰的信息了,还好有国家邮政局出面了解决,不得不为我们是社会主义点个赞。这次爬数据经历点波折,个人觉得阿里做的安全性还是很专业的。下面开始介绍如何找到突破口把数据拿到的。



​ 声明:此文只做技术交流,请不要恶意攻击,当然我也相信阿里的技术,不可能轻意被攻破的。


本文Demo下载:

菜鸟裹裹Demo(可能已经不能用)
快递100数据Demo

监控Ajax请求

  • 打开Chrome的控制台中的NetWork后,点击上面的查询按钮,查看请求记录,如下使用一个顺丰的物流号查询出对应的信息和请求:

    shufeng

    对应的请求为:

NetWorkInfo

阅读全文 »

本人用的模板是基于Codeboy的博客模板改造模板{:target=”_blank”},(由于本人可能会有很多样式修改,所以不再将修改pullrequst到原项目,在此对codeboy模板表示感谢)。功能改造如下:

添加微信支付宝打赏

这里也是一个开源的项目,项目地址,使用很方便,直接引用到项目中,配置下就可了:

1
2
3
4
5
6
7
8
9
10
11
12
13
<script>
window.tctipConfig = {
staticPrefix: "http://static.tctip.com",
buttonImageId: 1,
buttonTip: "zanzhu",
list:{
alipay: {qrimg: "http://blog.laofu.online/img/assets/o_zhifubao.png"},
weixin:{qrimg: "http://blog.laofu.online/img/assets/o_weixin.png"},
}
};
</script>

<script src="http://static.tctip.com/js/tctip.min.js"></script>

weixin

百度流量监控

为了查看个人的博客的人气,添加了百度的统计模块,可以方便的看到博客的pv/uv.注册地址{:target=”_blank”}

static

具体的添加方式如下 :

  1. 在_incluides文件夹下添加一个baidu_analyze.html的文件,内容如下

     
    	{%if site.baidu_analyze %}
    	
    
    	{% endif %}
    	
    

    {{site.baidu_analyze}} 是一个变量,可以把你申请的baidu的key值作为_config.yml的配置值存储下来。

阅读全文 »

前端的开发人员应该都知道sublime的神器,今天就说说如何使用sublime结合markdown快速写博客。

添加Snippets

在使用jekyll写博客的时候开篇都需要去写一个头部,内容如下:

 layout: post 
 title:xxxxx     
 date:xxxxxxx 
 author:xxxx

对于这个固定格式我们可以定义一个Snippets,具体的步骤如下:

  1. 在sublime中的 Tools—>Developer—>New Snippets..

    <snippet>
    <content><![CDATA[
    Hello, ${1:this} is a ${2:snippet}.
    ]]></content>
    <!-- Optional: Set a tabTrigger to define how to trigger the snippet -->
    <!-- <tabTrigger>hello</tabTrigger> -->
    <!-- Optional: Set a scope to limit where the snippet will trigger -->
    <!-- <scope>source.python</scope> -->
    </snippet>
    

    上面代码片段包含了sublime在什么时候插入什么内,详细参考官方文档Snippets{:target=”_blank”}

content

  • Hello, ${1:this} is a ${2:snippet}. 要的显示的文本

    其中的${}符号是tab索引占位,${1:time},说明此处是tab第一个占位,默认值是time

tabTrigger

  • \hello\</tabTrigger> 要触发的版本

    scope

  • \source.python</scope> 在那个类型文件触发

阅读全文 »

网站已经有了,需要对网站来绑定一个自己的个性域名,本人是买了一个阿里云的域名,也就是现在正在使用的laofu.online。当然这个是主域名,我们需要是是一个带有含义的二级域名,这里我添加一个blog.laofu.online的域名。

映射记录的添加

买了域名后,阿里云会有一个后台,这里我们需要把现在的域名转发到我们github-pages所生成的网站。这里我们只需要添加一个CName的记录就可以了,设置如下:

domain

github添加CName文件

域名的跳转是双向的,我可以转发给你,你也要在服务器上面绑定打指定的域名才行,这个就可以在github的gh-pages的根目录下添加一个CName的文件,文件是你的二级域名,github会自动绑定CName中的域名。

domain

domain

阅读全文 »

对于经常写博客的人,都很想拥有一个属于自己的独立博客,但一个独立的博客可能需要以下几个东西:

  1. 域名
  2. 一个前端的模板
  3. 一个后台的管理
  4. 一个数据库
  5. 部分的统计和其它模块

这样的话,我们的精力可能都了要放到博客的管理上面,而不是博客的内容。 随着github的出现,这样问题出现了改观,使用gitbub提供的github pages功能可以提供一个独立的站点供我们使用。结合相关的域名配置,我们就可以很方便的搭建属于自己的博客平台。

github Pages的使用

概述

对于开发者来说github是很熟悉的,是一个托管代码和开源的网站.如果你想找一个开源的项目,首先看到的可能是一个源码的列表,这样对于项目的展示不够直观,github pages就是为也解决这个问题而出现,允许开发者自定义一个展示页面,来替代原有的代码列表。

具体的规则

在github的项目中,创建一个gh-pages的分支,分支创建完成后就可以使用http://{userName}.github.io/{projectName}来进行访问。更详细参见:[github Pages](https://pages.github.com/){:target="_blank"}

一个实例

  1. 创建一个项目,并对项目进行初始化,运行以下命令

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
       
    mkdir gitDemo #创建一个目录

    cd gitDemo

    git init #git 初始化

    git checkout --orphan gh-pages # 创建gh-pages分支。

    ```
    2. 进行gitDemo文件夹,添加一个html文件,index.html,添加如下内容:

    ``` html
    <h1>Hello github Pages!!</h1>
阅读全文 »

服务器的监听(IIS6.0+版本)

  1. 当请求到达服务器时,请求最终会到达TCPIP.SYS驱动程序,TCPIP.SYS将请求转发给HTTP.SYS网络驱动程序的请求队列中(可以理解为专门处理http请求的进程),当然在处理请求的过程中,HTTP.SYS进程会维护一个配置表用缓存请求的url和和应用程序池对应的关系。

  2. 当一个http请求被捕获到,HTTP.SYS会读取配置表,如果对应的应用程序没有启动,则HTTP.SYS会启动IIS相对应的应用程序。具体运行机制可以理解成为:

HTTP.SYS

HTTP.SYS是TCP之上的一个网络驱动程序,因此,HTTP.SYS不再属于IIS(这里说的IIS都是IIS6.0+版本,下文如果不特殊指明,默认为IIS6.0+版本),它已经从IIS中独立了出来。 Http.Sys独立有以下几个优点:

  • 可靠性: HTTP.SYS运行在内核模式下,作为操作系统的驱动程序运行。因此,HTTP.SYS不会受到用户代码的影响,它始终处于稳定运行状态,对用户的http请求进行监听,并及时作出反应。

  • 高性能: 从用户发送http请求到系统返回响应结果的这一过程都是HTTP.SYS在内核模式下完成的。不需要在内核模式和用户模式下进行切换,这样就极大地节省了系统资源,提高了请求的响应速度。

IIS处理

W3SVC

  1. W3SVC服务是一个独立运行的程序,寄宿在svchost.exe进程中,负责用户的参数监视和重新启动应用池的工作。 当一个请求进入HTTP.SYS的队列中,会通知W3SVC服务根据IIS中的配置去创建对应的应用进程,进行处理。

W3WP.exe

阅读全文 »