『協議』XML-RPC 協議規格說明

為什么80%的碼農都做不了架構師?>>> ??hot3.png

這篇文章提供所有實現XML-RPC協議所需要的內容。

?


一覽

XML-RPC是一個工作在因特網上的遠端程序調用(Remote Procedure Calling)協議。

XML-RPC消息是一個HTTP-POST請求(Request)。請求的主題是在XML中。一個在服務器上執行的程序和它返回的值也是使用XML來格式化的。

被終端調用的程序參數可以是標量(scalars)、數值、字符串、日期等;并且還可以是混合記錄和列表結構。

示例

下面是一個XML-RPC請求的例子:

   1: POST /RPC2 HTTP/1.0
   2: User-Agent: Frontier/5.1.2 (WinNT)
   3: Host: betty.userland.com
   4: Content-Type: text/xml
   5: Content-length: 181
   6:?
   7: <?xml version="1.0"?>
   8: <methodCall>
   9:     <methodName>examples.getStateName</methodName>
  10:     <params>
  11:         <param>
  12:             <value>
  13:                 <i4>41</i4>
  14:             </value>
  15:         </param>
  16:     </params>
  17: </methodCall>

頭部(Header)需要

在頭部第一行中的URI的格式并沒有被指定。例如,如果服務器只處理XML-RPC調用的話,它可以是空的、一個簡單的斜線。然而,如果服務器是處理一個混合傳入HTTP請求,我們允許URI幫助將請求導向到程序處理XML-RPC請求的代碼處。如,/RPC2告訴服務器將請求導向到“RPC2”響應器。

一個用戶代理(User-Agent)和主機(Host)必須被指定。

內容類型(Content-Type)必須是text/xml。

內容長度(Conteng-Length)必須被指定且必須正確。

負載(Payload)格式

payload是在xml中的一個簡單的<methodCall>方法調用結構。

<methodCall>必須包括<methodName>子項,一個包括被調用方法的名字的字符串。這個字符串也許只是包括標識字符(大寫或小寫的A-Z)、數值字符(0-9)、下劃線、點、冒號、斜線。這已經足夠服務器云決定如何解釋方法名了。

例如,方法名可以是一個包含執行引入請求(incoming request)腳本的文件名。它可以是數據庫中的一個表的單元格名。或者它可以是被一個在層級式目錄中的的一文件路徑。

如果程序調用有參數,<methodCall>發源包括一個<params>參數子項。這個<params>子項能夠包括任意數量的<param>,每一個<param>都有一個值。

標量(scalar)<value>值

<value>值可以是標量(scalar),類型如下表所示:

TagTypeExample

<i4> or <int>

four-byte signed integer

-12

<boolean>

0 (false) or 1 (true)

1

<string>

string

hello world

<double>

double-precision signed floating point number

-12.214

<dateTime.iso8601>

date/time

19980717T14:08:55

<base64>

ase64-encoded binary

eW91IGNhbid0IHJlYWQgdGhpcyE=

如果沒有指定類型,類型就是字符串。

<struct>結構

一個值可以是<struct>類型的。

一個<struct>包括<member>,每一個<member>包括一個<name>和一個<value>。

下面是一個有兩個<struct>元素的例子。

   1: <struct>
   2:      <member>
   3:           <name>lowerBound</name>
   4:           <value>
   5:                <i4>18</i4>
   6:           </value>
   7:      </member>
   8:      <member>
   9:           <name>upperBound</name>
  10:           <value>
  11:                <i4>139</i4>
  12:           </value>
  13:      </member>
  14: </struct>
<struct>可以是遞歸的,任何<value>可以包括一個<struct>或其他類型,包括下面要描述的<array>。

<array>數組

值可以是<array>數組類型的。

一個<array>包括一個獨立的<data>元素,這個元素可以包括任意多個<value>。

下面是一個四元素數組的示例:

   1: <array>
   2:    <data>
   3:       <value><i4>12</i4></value>
   4:       <value><string>Egypt</string></value>
   5:       <value><boolean>0</boolean></value>
   6:       <value><i4>-31</i4></value>
   7:    </data>
   8: </array>

<array>元素沒有名字。

你可以在上面的示例中使用混合類型。

<arrays>是可以遞歸的,任何值可以包括一個<array>或任意的類型,包括上文描述過的<struct>。

響應(Response)示例

下面是一個對XML-RPC請求的響應示例:

   1: HTTP/1.1 200 OK
   2: Connection: close
   3: Content-Length: 158
   4: Content-Type: text/xml
   5: Date: Fri, 17 Jul 1998 19:55:08 GMT
   6: Server: UserLand Frontier/5.1.2-WinNT
   7:?
   8: <?xml version="1.0"?>
   9: <methodResponse>
  10:     <params>
  11:         <param>
  12:             <value>
  13:                 <string>South Dakota</string>
  14:             </value>
  15:         </param>
  16:     </params>
  17: </methodResponse>

響應(Response)格式

除非有一個層等級的錯誤,不然總是會返回200成功碼。

內容類型是text/xml。內容長度必須呈現且正確。

響應體是一個簡單的XML結構<methodResponse>,它可以包括一個<params>,<params>可以包括一個獨立的<value>。

<methodResponse>還可以包括一個<fault>。<fault>可以包括一個<value>。<value>可以包括一個包含有兩個元素的<struct>,一個元素是<faultCode>,一個元素是<faultString>。

<methodResponse>可以不包括一個<fault>和<params>。

錯誤(Fault)示例

   1: HTTP/1.1 200 OK
   2: Connection: close
   3: Content-Length: 426
   4: Content-Type: text/xml
   5: Date: Fri, 17 Jul 1998 19:55:02 GMT
   6: Server: UserLand Frontier/5.1.2-WinNT
   7:?
   8: <?xml version="1.0"?>
   9:     <methodResponse>
  10:         <fault>
  11:             <value>
  12:                 <struct>
  13:                     <member>
  14:                         <name>faultCode</name>
  15:                         <value>
  16:                             <int>4</int>
  17:                         </value>
  18:                     </member>
  19:                     <member>
  20:                         <name>faultString</name>
  21:                         <value>
  22:                             <string>Too many parameters.</string>
  23:                         </value>
  24:                     </member>
  25:                 </struct>
  26:              </value>
  27:     </fault>
  28: </methodResponse>
  29:?

?

策略和目標


明文。這個協議的目標是在沒有新的可以超越CGI接口的力量被提供時,制訂一個可以跨越不同環境的兼容性的“根據”,防火墻軟件可以看到內容類型是text/xml的POSTs。

可讀。我們想要一個干凈的可擴展的非常簡單的格式。這使得一個HTML程序員能夠看懂包括XML-RPC協議調用的文件、理解這個文件的用途以及可以修改它并讓它在第一次或第二次嘗試后工作起來成為了可能。

容易。我們想要它成為一個可以被很容易實現去快速在不同的環境與不同的操作系統中運行的協議。

轉載于:https://my.oschina.net/skyler/blog/706112

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/458295.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/458295.shtml
英文地址,請注明出處:http://en.pswp.cn/news/458295.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Qt之QLineEdit詳解(附源碼)

原博客地址&#xff1a;http://blog.csdn.net/liang19890820/article/details/52044639&#xff0c;感謝原作者總結和分享。 簡述 QLineEdit是一個單行文本輸入框。 QLineEdit允許用戶輸入和編輯單行純文本&#xff0c;提供了很多有用的編輯功能&#xff0c;包括&#xff1a;撤…

POJ 1323 Game Prediction#貪心

(&#xff5e;&#xffe3;▽&#xffe3;)&#xff5e;* //既然是求最少能勝幾次 //說明對方是要盡可能讓我輸 //但為了避免浪費&#xff0c;對方會用比我的牌大的牌中的最小pip的牌來擊敗我 #include<iostream> #include<cstdio> #include<cstring> #inclu…

qt學習之鍵盤事件( keyPressEvent)

//最近一直忙于做驅動&#xff0c;對底層東西很是好奇&#xff0c;好奇鍵盤是 怎么區分每個鍵值的&#xff0c;又是怎么響應的&#xff01;因此&#xff0c;就有了下面這些代碼//環境windows 工具qt 語言c//在主窗體類中聲明鍵盤響應函數 void keyPressEvent(QKeyEvent * event…

C#json數據的序列化和反序列化(將數據轉換為對象或對象集合)

引用 System.Runtime.Serialization.Json 轉載于:https://www.cnblogs.com/a849788087/p/5645828.html

位圖(bmp)文件格式分析

from&#xff1a;https://blog.csdn.net/qingchuwudi/article/details/25785307 位圖(bmp)文件格式分析 作者&#xff1a;深藍&#xff08;由博主分享&#xff09; 一、什么是位圖 計算機能以位圖和矢量圖格式顯示圖像。 1、位圖(Bitmap)&#xff1a; 圖像又稱點陣圖或光…

匯付 支付,痛苦的接入過程

有文檔&#xff0c;但是&#xff0c;寫文檔的人明白&#xff0c;看文檔的人很有難度。 沒有SDK&#xff0c;要自已寫。 然后&#xff0c;錢的流入流出都必須經過虛擬錢包&#xff0c;提現還要綁取現卡&#xff0c;這個我也能理解&#xff0c;不能理解的是&#xff0c;訂單退款&…

隨筆分類 - HALCON學習例程中文詳解

from: https://www.cnblogs.com/chita/category/563492.html隨筆分類 - HALCON學習例程中文詳解HALCON學習例程中文詳解跟我學機器視覺-HALCON學習例程中文詳解-測量圓環腳寬間距摘要: 跟我學機器視覺-HALCON學習例程中文詳解-測量圓環腳寬間距* This example program demonstr…

WinCE6 如何去掉控制面板中的應用?

在WINCE600/PUBLIC/WCESHELLFE/OAK/FILES/wceshellfe.bib把對應的cpl 干掉例如區域設置 好像是2個 ; CESYSGEN IF WCESHELLFE_MODULES_INTLPintlp.cpl $(_FLATRELEASEDIR)/intlp.cpl NK SH ; CESYSGEN ENDIF ; CESYSGEN IF WCESHELLFE_MODULES_INTLLintll.cpl $(_FLATRELEASEDI…

軟件自動更新解決方案及QT實現

from&#xff1a;https://blog.csdn.net/hulinhulin/article/details/46839107軟件自動更新解決放案及QT實現...11 文件的版本控制-XML.22 更新程序的實現...22.1 界面設置...22.2 程序功能...32.2.1 下載網絡數據...32.2.2 XML文件的分析...62.2.3 下載XML文件的DownLoadXML函…

java 基本功 —— 內存相關

2019獨角獸企業重金招聘Python工程師標準>>> 首先我們來說說內存&#xff0c;因為從內存的角度來出發來分析一些變量&#xff0c;引用或者對象的生命周期會更好理解一些。 java是一門編程語言&#xff0c;他跟C有什么不同呢&#xff1f;本質上&#xff0c;他們都是一…

DOM事件處理有三個階段

DOM事件處理有三個階段&#xff1a; 捕捉階段&#xff08;capture phase&#xff09;&#xff1a;從最上層元素&#xff0c;直到最下層&#xff08;你點擊的那個target&#xff09;元素。路過的所有節點都可以捕捉到該事件。命中階段&#xff08;target phase&#xff09;&…

客戶端程序自動更新(升級)的方式

from&#xff1a;https://blog.csdn.net/woaitingting1985/article/details/72954652一、C/S自動更新原理C/S程序自動升級是一個很重要的功能&#xff0c;原理其實很簡單&#xff0c;一般包含兩個程序一個是主程序&#xff0c;也就是除了升級功能以外的程序&#xff0c;另一個就…

怎么用源程序把ChemDraw結構復制到Word文檔

在學習化學過程中&#xff0c;不可避免的會接觸到各種化學結構。這個時候就需要通過繪制化學結構來進行這方面的學習和傳播。ChemDraw Professional 15就可以輔助完成這方面的工作。很多的用戶朋友會通過選中后復制粘貼可以將ChemDraw結構復制到Word文檔中&#xff0c;但這只是…

網絡流(最大流) HDU 1565 方格取數(1) HDU 1569 方格取數(2)

HDU 1565 方格取數(1)給你一個n*n的格子的棋盤&#xff0c;每個格子里面有一個非負數。從中取出若干個數&#xff0c;使得任意的兩個數所在的格子沒有公共邊&#xff0c;就是說所取的數所在的2個格子不能相鄰&#xff0c;并且取出的數的和最大。 Input 包括多個測試實例&#…

python學習 第一篇 基礎

上周報名了reboot python 課程&#xff0c;終于下決心要把python 搞好了&#xff0c;希望自己能堅持下來&#xff0c;并得到自己想要的成績#coding:utf-8 #呵呵 #print hello world #xhello world #print x #xraw_input(hello world) #print x #int #print 23 #print 12*3 #pri…

QT串口編程的相關類(QSerialPortInfo)

QT Serial Port相關的類只有兩個QSerialPortInfo(#include<QSerialPortInfo>) 和QserialPort(#include<QSerialPort>) 先來介紹QSerialPortInfo 1&#xff1a;QSerialPortInfo(#include<QSerialPortInfo>) 該類是一個串口的輔助類類&#xff0c;提供主要是提…

用jquery寫一個屬于自己的音樂播放器

看到一個用css3實現的CD的動畫&#xff0c;演示在這兒http://codepen.io/_kieran/pen/QNRmep 突然那我就想說給自己做一個音樂播放器吧&#xff0c;說做就做。演示在https://echolsx.github.io/music/ Github傳送門&#xff1a;https://github.com/EchoLsx/music 主要代碼&…

四年一閏 隨筆

今天日子比較特殊&#xff0c;碰到閏年的2月29日。好久沒有記錄隨筆了&#xff0c;今天隨便記上幾筆吧 1、上家公司居然沒幫我交社保&#xff0c;一整年了&#xff0c;發工資時還照扣社保的錢。。。現在說會補差額給我&#xff0c;算下來一年XXXX&#xff0c;也只是個數字&…

Qt 串口類QSerialPort 使用筆記

Qt 串口類QSerialPort 使用筆記雖然現在大多數的家用PC機上已經不提供RS232接口了。但是由于RS232串口操作簡單、通訊可靠&#xff0c;在工業領域中仍然有大量的應用。Qt以前的版本中&#xff0c;沒有提供官方的對RS232串口的支持&#xff0c;編寫串口程序很不方便。現在好了&a…

什么是H標簽?H1,H2,H3標簽?以及和strong標簽使用的方法及重要性

大家都知道&#xff0c;seo的一個很重要的一點就是要把網站做的條理清晰&#xff0c;讓搜索引擎很容易的讀明白&#xff0c;這個條理清晰不僅體現在網站的物理路徑&#xff0c;url等地 方。在<h1><h2><h3>等方面也是這樣。并不是<h1>對于關鍵字排名有幫…