小白刚入门,如有不足之处请多指教。谢谢!
今天简单记录一下XML-RPC 的学习过程。
1.什么是XML-RPC?
最简单的方式当然是百度啦。但是我基础太差了,看百度都头大:
XML-RPC的全称是XML Remote Procedure Call,即XML(标准通用标记语言下的一个子集)远程过程调用。它是一套允许运行在不同操作系统、不同环境的程序实现基于Internet过程调用的规范和一系列的实现。这种远程过程调用使用http作为传输协议,XML作为传送信息的编码格式。Xml-Rpc的定义尽可能的保持了简单,但同时能够传送、处理、返回复杂的数据结构。这个过程也被大家称为“分布式计算”。
我的理解就是在一台电脑上的数据,通过xml-rpc的形式,可以在另外一台电脑上访问。如果看百度不清楚还是直接看程序吧:
(选自 https://blog.csdn.net/comprel/article/details/72633406 )
2.两个库
类库:xmlrpclib 一般使用在客户端,这个模块用来调用注册在XML-RPC服务器端的函数,xmlrpclib并不是一个类型安全的模块,无法抵御恶意构造的数据,这方面的一些处理工作需要交给开发者自己。
类库:SimpleXMLRPCServer 一般是用在服务器端,这个模块用来构造一个最基本的XML-RPC服务器框架(单线程服务器)
大致用法:使用SimpleXMLRPCServer模块运行XMLRPC服务器,在其中注册服务器提供的函数或者对象;然后在客户端内使用xmlrpclib.ServerProxy连接到服务器,想要调用服务器的函数,直接调用ServerProxy即可。
服务端:
第4行:服务端定义了get_power这个函数,其结果是n^m。
第7行:“0.0.0.0”输入自己的localhost,后面的“8081”是端口。(要注意端口是否被占用,防火墙是否开放该端口,链接:https://jingyan.baidu.com/article/624e745902cebc34e9ba5a58.html)(入站规则和出站规则都改一下)
tips:
1. 服务端和客户端要在一台主机上做测试的话,要不全写成"localhost"或者全写成"127.0.0.1"形式,要不全写成自己的内网IP或外网IP,如"192.168.0.10"形式;
2. 不在同一个主机上的话,服务端本地地址不能写成"127.0.0.1"或者"localhost",而要写成自己的内网IP或外网IP形式。
3. 最简单一种方法:服务端地址写成""形式。
第9行:注册该函数。
第10行:开始启动服务器。
客服端:
第1行:xmlrpclib 及 simplexmlrpcserver都是python2自带的不需要安装第三方库。
第3行:客服端的localhost和之前设定的端口。(为了更好的区别不同服务)
第4、5行:调用在服务端定义的函数。
简单的xml-rpc就完成啦。看程序比看文字好理解很多,大致就是远程调用服务端上的数据、函数等等。只是其调用方式使用http作为传输协议,XML作为传送信息的编码格式。(http协议和xml编码格式可以了解一下(菜鸟教程):http://www.runoob.com/http/http-tutorial.html http://www.runoob.com/xml/xml-tutorial.html)
3.一些简单的使用:
https://blog.csdn.net/comprel/article/details/72633482
https://blog.csdn.net/comprel/article/details/72633406
4.记录一些遇到的问题及经验:
connection refused:
检查端口是否被占用;检查防火墙设置出、入站规则;检查localhost是否正确;
如何查看localhost:
windows一般是127.0.0.1.但是要注意区别localhost、ip、127.0.0.1。linux可以尝试在命令行中 hostname -i 查看
localhost、127.0.0.1区别:(资料来自:https://www.cnblogs.com/rendd/p/5928733.html)
localhost意为本地主机,指这台计算机,是给回路网络接口的标准主机名,对应的IP地址为127.0.0.1,可访问本地服务器的web项目(http://localhost)。
1.localhost不通过网卡传输,不受防火墙和网卡限制;而127.0.0.1则依赖于网卡,会受到防火墙和网卡的限制。
2.localhost访问时带着本机当前用户的权限;而用IP访问时,是通过网络再去访问主机,涉及到网络用户权限。
3.因为用localhost访问时不会解析成IP,也就不会占用网络资源,因此一般情况下用localhost更方便快捷。
无法访问本地的localhost怎么办呢?:
打开http://127.0.0.1/ 看是否能访问IIS(互联网信息服务)的默认网页,能访问则说明IIS已经成功开启,否则检查IIS是否在本机安装且开启;
开始--命令(cmd)--ping localhost,看返回的数据是否为127.0.0.1,如果是则说明可以解析localhost,否则打开C:\WINDOWS\system32\drivers\etc\host文件看里面有没有127.0.0.1 localhost,添加好后再去访问localhost;
关闭电脑上的防火墙试试,或检查电脑上是否有恶意插件;
实在不行将IIS卸载掉,重新安装一次。
电脑没有iis:
这是我遇到最可恶的事情了。我的是win10ghost版,为了系统稳定很多功能都精简掉了。如果和我一样的朋友,快点重装吧,不要多想了。