JSON-RPC访问CppCMS的笔记

测试JSON RPC远程调用(JSON客户端) #include #include #include /* 标题:JSon客户端 Author: Kagula LastUpdateDate:2014-05-17 描述:测试JSON RPC远程调用 测试环境:Windows 8.1、Visual Studio 2013 SP1 curl-7.36.0 CPPCMS 1.0.4(JSON服务端) Java S 阅读详情

用ajax访问一个service,  后端的service是用C++,CppCMS框架,作者给的例子是python写的例子利用JSON-RPC访问的方法,,需要设置Content-Type:application/json, 经测试,python可以正常访问到这个service。

新建立一个本地的html测试后,设置了xhr.setRequestHeader("Content-Type","application/json");

测试的结果是ie8 能够正常设置Content-Type, 能够和后端交互,服务器端返回status200, 获得正确结果。

但是chrome里和 ff里反复设置content-type,都不成功,在浏览器的网络面板里也没看到发出去的请求。用fiddler等工具也没有发现正确的请求头部和正确的应答结果。

在 chrome里只有设置了xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded,application/json; charset=utf-8");才能在网络面板里看到,但是被浏览器给canceled掉了. 

而且Content-Type中在把application/json放到了后边也没有请求,从这个可以发现,application/json;必须要设置为第一个参数。

调了很长都未果,后来用firebug的rest插件模拟一个请求,设置content-type:application/json, 参数"{'method':'sum','params':[1,2],'id':1}",得到正确的结果3,考虑到这些发现了是一个跨域的问题,解决了同源策略问题后,得到了正确的结果,Content-Type也正确的设置上了。

注意:IE6不支持JSON-RPC 的这种方式 ,setRequestHeader也不是所有浏览器都可以设置的。所以要考虑兼容性还要换其他的访问方式。

简单说一下JSON-RPC 

JSON-RPC分为1.0 和 2.0

1.0的参数设置 可以参考http://json-rpc.org/wiki/specification

·        method - A String containing the nameof the method to be invoked.

·        params - An Array of objects to passas arguments to the method.

·        id - The request id. This can beof any type. It is used to match the response with the request that it isreplying to.


method:是请求的方法名

params:是一个参数数组

id:是一个唯一的id


一个例子是"{'method':'sum','params':[1,2],'id':1}";

测试代码如下:

var xhr = new XMLHttpRequest();
var params = "{'method':'sum','params':[1,2],'id':1}";
xhr.open("post", “path /rpc”, true);
xhr.setRequestHeader("Content-Type","application/json");  //要再open方法后调用
 
xhr.onreadystatechange = function() {
     if (xhr.readyState === 4) {
           if (xhr.status >= 200 && xhr.status < 300 || xhr.status === 304) { 
             alert("ok") 
            }
     }
}
xhr.send(params);


Web开发由于需要经常进行ajax请求,很多时候涉及到跨域,由于浏览器的同源策略,所以会影响到正确的请求和返回数据。

关于同源策略(Same Origin Policy)

最早源于Netscape Navigator 2.0,在浏览器端是一个重要的安全策略。同源是指,域名相同,应用层协议相同,端口相同,当这些属性完全一致时时才被认为是同源。所以当遇到下面的访问时都要考虑到跨域的问题。

例如果一个页面: http://www.test.com/

父域名是test.com.

子域是

www.test.com

lab.test.com等



一些跨域的情况,当前页面是:

http://www.test.com/1/index.html

如果访问下边的页面

页面                                                        结果                                 原因
             
http://www.test.com/2/index.html          成功                            同协议 同host
http://www.test.com:82/1/other.html     失败                            不同端口80 82
https://www.test.com/1/other.html        失败                            不同的协议http, https
http://en.test.com/1/other.html              失败                            不同host, 子域不同www.test.com  en.test.com

跨域的一些方案

1 跨子域之间的相互访问

例如父域名都是test.com,子域是www.test.com 和other.test.com,

在www.test.com要通过ajax请求other.test.com页面里的一个文本other.test.com/1.txt.

这样直接请求由于是跨子域是返回不了数据的.


跨子域可以通过把两个页面都要设置domain = test.com

首先要包括子页面的一个iframe文件

<iframe src=”other.test.com/iframe.html” id=“crossIframe” ></iframe>

然后设置domain

document.domain = " test.com";


获得这个iframe的窗口,这里用jquery框架方便调用

 contentWindow是获得框架中的窗口,类似于window

var crossIframe = document.getElementById("crossIframe").contentWindow.$;
var url ="other.test.com/1.txt";
crossIframe.get(url,function(data){          
                    	alert("成功");  
                    }

                );

在other.test.com/iframe.html里要include jquery库文件

document.domain = “test.com”;

这样就可以在test.com的html页面中成功获取1.txt了



2 用注入方式跨域,经常说的jsonp

注入的主要跨域思路是建一个script脚本,append进head或者是body.

有两种方法

第一个种是在<script>标记中

例如当前的地址是www.abc.com.  要访问www.xyz.com/getResult的服务

<script src="www.xyz.com/getResult?name=hiro& &callback=?"></script>

该脚本会向www.xyz.com/getResult发送请求,该服务返回的格式要是javascript可以执行的代码,当script调用成功后,会自动调用callback.

这里需要的就是www.abc.com 里要有一个callback函数,以便刚才的script脚本成功执行后的回调。

function callback(data){

   alert(data);  //data为script脚本成功调用返回的数据

}


第二种是:

把刚才的url传入即可,动态生成一个script元素,然后插入document或者head

 function JSON(url){      // 调用JSONP服务器,url为请求服务器地址

       var script =document.createElement("script");      

       script.setAttribute("type", "text/javascript");   

       script.setAttribute("src",url);

       script.setAttribute("id", url);

       document.appendChild(script);

    }


或者用jquery框架
var url = "http://www.xyz.com/getResult?name=hiro&callback=?";
$.get(url, {"targetId":targetId}, function(data){
      
},"json");
1.2版本以上只要上面写一个占位符?就可以,Jquery会把自动会把callback=?转换为注入方式


或者用jquery的$.ajax

$.ajax({  
    	type:"get",  
    	data:{},  
        url:url,  
        dataType:"jsonp",  
        jsonp:"callback",  
        success:function(data){                          
        }  
     }); 



3利用iframe进行两个站点的跨域

刚才所说的是跨子域的iframe方法,如果跨两个域的方法会更麻烦一些,利用iframe + location hash值进行通信。


4用后端语言作为中间层

可以用例如java c#,python等做为中间层取去请求服务,然后再返回本域的数据。

使用Eggjs做服务端获取微信小程序云开发数据库的access_token 最近自己想写了一个微信小程序,恰巧里面有个云开发,恰巧里面有个数据库,那懒人的我,就直接用云开发里面的数据库了,做测试或者正式也好,对于刚开始来说,免费的配额是够用的。 后来想到在小程序云开发上面的数据怎么看才方便?刚好微信小程序有一个服务端API,那就方便很多了,那就直接敲个服务端来获取云开发上数据库的数据出来到自己的后台上面,那以后管理起来也方便很多。 看了一下服务端api之后,发现有三个重要... 阅读详情

相关推荐

避坑指南:Qt5.14.2 ARM交叉编译中那些你可能遇到的‘坑’及解决方案

本文深度解析了Qt 5.14.2在ARM架构上进行交叉编译的完整流程与常见难题。重点阐述了如何精准匹配交叉编译器与目标板环境、正确配置sysroot以及使用configure参数的艺术,并针对编译过程中的头文件缺失、链接错误等典型“坑”提供了经过验证的解决方案,旨在帮助开发者成功构建适用于嵌入式设备的Qt运行时库。

weixin_29279101的博客 352

CppCMS应用启动顺序问题

今天碰到了一个开机启动顺序问题,记录下来,update-rc.d 有一篇博客写的很好。 http://wangyan.org/blog/ubuntu-update-rc-d.html 我的CppCMS应用启动之前需要先启动MongoDB, Mongodb的 启动顺序采用的是默认20,因此CppCMS应用的启动顺序要大于20,我采用如下命令: update-rc.d cppweb star...

ribishuangba 161

TPAMI审稿人关注什么

写在开头:被tpami接收大概是每个cs er最开心的事情吧!今天阅读TPAMI的文章时,发现有扩刊的文章,也有不是扩刊的文章,那么这两类文章哪个更容易被接收呢?

carlous0的专栏 1684

使用Nginx+CppCMS构建高效Web应用服务器(之三)

使用Nginx+CppCMS构建高效Web应用服务器(之三)   --充分利用服务器和客户端计算能力              欢迎测试,攻击:http://www.litelottery.com 网页右上角,选择博彩,演示双色球开奖记录,更多功能,稍后添加。 1:闲言碎语不要讲,Nginx+CppCMS搭建请参见之一。 2:此讲集中说明一个实例:使用Nginx+...

weixin_30251587的博客 165

Gröbner基方法入门第I部分:项序和约化

Gröbner基方法入门第I部分:项序和约化 理想的准素分解与矩阵分解是计算代数的核心问题,它们在计算机代数、计算代数几何、代数编码和密码学、多维系统理论等学科都有非常重要的理论意义与应用价值.Gröbner基理论是研究理想的准素分解与矩阵素分解的重要工具之一.更简单地概括:Gröbner基方法是从任意一个多项式理想的一组给定生成元,计算另一组性质良好的生成元,并称为该理想的Gröbner基.它能用来判定任意多项式是否属于该理想. Gröbner基的代数算法是Buchberger在1960年代开发的,并

MinCong Luo的博客 4263

机器学习预测土壤养分:从电导率、pH到随机森林与神经网络的农业实践

在智慧农业与精准农业领域,机器学习已成为处理复杂农业数据、挖掘潜在规律的关键技术。其核心原理在于通过算法从多维数据中自动学习特征与目标变量之间的映射关系,尤其擅长捕捉非线性关联。这项技术的核心价值在于能够将传统上依赖昂贵、耗时实验室分析的问题(如土壤养分检测),转化为基于易获取传感器数据(如电导率、pH值)的快速、低成本预测任务,为农业生产的实时决策与资源优化提供了全新可能。其典型应用场景包括作物生长监测、产量预测以及精准施肥管理等。本文聚焦于利用随机森林和神经网络等回归算法,构建通过土壤物理参数预测氮磷钾

weixin_33693070的博客 665

使用cppcms开发JSON_RPC服务:高级用法

通过最近几天的研究,我发现cppcms的API有更高级更丰富的功能,比如URL的映射,JSON value与常用数据类型的转换。其配置文件也有很丰富的选项,比如多线程和多进程模式,网络参数等。 代码示例如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

bible521125的专栏 2225

影刀RPA进阶:Excel多条件筛选与数据提取实战

本文详细介绍了如何利用影刀RPA实现Excel多条件筛选与数据提取的自动化。通过拆解文本、数值、日期及颜色筛选等核心指令,并结合实战案例,指导用户构建稳健的销售数据提取机器人,从而高效处理复杂数据报表,提升工作效率。

onion的博客 530

CppCMS JSON输入和输出

CppCMS支持输入运算符>>和输出一

monkey_four的专栏 1147

STEP 7-Micro/WIN SMART 编程软件:从入门到精通的使用指南

通过不断实践,熟悉软件的各项功能和操作技巧,工程师可更好地应对工业自动化控制中的各种挑战,开发出高效、稳定的控制程序。项目的基本组件是构成程序的核心元素,包括:程序块(主程序 OB1、子程序和中断程序)、数据块(给 V 存储器赋初值)、系统块(硬件组态和参数设置)、符号表(用符号代替存储器地址,使程序更易理解)以及状态图表(监视、修改和强制变量状态)。下载程序时,单击工具栏上的 “下载” 按钮,在弹出的下载对话框中选择要下载的块(程序块、数据块、系统块),单击 “下载” 即可。

电工 5573

华为OD机试 - 项目规划 - 深度优先搜索dfs(Java 2024 C卷 100分)

每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天优快云在线答疑。

学Java,找哪吒 1153

CppCMS获取JSON数据成员

构造json数据参考上一篇文章 设json数据为

monkey_four的专栏 838

基于ESP32的智能厨房控制系统开发

随着智能家居技术的发展,越来越多的家庭开始将传统的厨房设备进行智能化改造,以提高烹饪效率和生活质量。智能厨房控制系统是物联网(IoT)应用的重要组成部分,它将家居设备、传感器和网络结合起来,提供便捷的控制与监测功能,使厨房的烹饪过程更加智能、便捷和安全。基于ESP32的智能厨房控制系统不仅能够实现远程控制和监控,还能实现温度、湿度、烹饪状态的实时反馈,甚至具备智能化的推荐和自动化控制能力。ESP32是一款功能强大、集成度高的嵌入式开发平台,具有Wi-Fi和蓝牙双模通信能力,广泛应用于物联网设备的开发。

2201_76125393的博客 658

用CppCMS实现web site并同时支持json_rpc服务

刘怀宇1.将cppcms-0.99.10/examples/json_rpc/rpc.cpp文件中的json_service类拷贝到examples/templates/hello-tmpl.cpp 中2.修改hello-tmpl.cpp 中的main函数,添加两个服务int m

Dean Chen的专栏 5385

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

CppCMS:高性能C++ Web开发框架终极指南

**CppCMS** 是一款专为极致性能优化的C++ Web开发框架,它不仅能轻松应对高并发场景,还能为开发者提供完整的Web应用开发解决方案。如果你是C++开发者,想要构建高性能的Web服务,那么CppCMS绝对是你的不二之选!🚀 ## 什么是CppCMS? CppCMS是一个**免费开源**的高性能C++ Web开发框架,旨在实现**快速Web应用开发**。与Python Django、

gitblog_00436的博客 390

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

终极C++ Web框架指南:CppCMS高性能开发全解析

在当今快速发展的Web开发领域,C++开发者终于有了一个强大的选择——CppCMS框架。这是一个专为C++语言设计的高性能Web开发框架,让C++开发者能够轻松构建现代化的Web应用程序。无论你是企业级应用开发者还是个人项目爱好者,CppCMS都能为你提供完整的解决方案。 ## 🚀 CppCMS框架的核心优势 CppCMS不仅仅是一个简单的Web框架,它提供了一套完整的工具链,让C++开发者

gitblog_00477的博客 425

Java调用jsonrpc请求_测试JSON RPC远程调用(JSON客户端)

#include #include #include /*标题:JSon客户端Author: KagulaLastUpdateDate:2014-05-17描述:测试JSON RPC远程调用测试环境:Windows 8.1、Visual Studio 2013 SP1curl-7.36.0CPPCMS 1.0.4(JSON服务端)Java Servlet (JSON服务端)*/static std...

weixin_36431035的博客 675

HTTP服务端JSON服务端

HTTP服务端JSON服务端 最后更新日期:2014-5-18 Author:Kagula 阅读前提:CMake工具的基本使用 内容简介: CPPCMS是个开源Web开发框架,通过它可以很容易实现HTTP服务和JSON服务,这里介绍CPPCMS开发环境的搭建。写一个CPPCMS测试程序,它建立HTTP服务,向浏览器返回Hello,World页面。CPPCMS依赖的一些第三方库,其它...

SurpassLi的专栏 43

測试JSON RPC远程调用(JSONclient)

#include &lt;string&gt; #include &lt;iostream&gt; #include &lt;curl/curl.h&gt; /* 标题:JSonclient Author: Kagula LastUpdateDate:2014-05-17 描写叙述:測试JSON RPC远程调用 測试环境:Windows 8.1、Visual Studio 2013 S...

weixin_34326429的博客 228
上一篇: VM中Minix安装
下一篇: 传意在线表情包
fipl
博客等级 码龄25年 10粉丝 5原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值