如何与Kronos API通信?
我有一个Kronos入口点http://kronos../wfc/XmlService我应该可以访问但是当我在浏览器中打开它时,响应是:
我该怎么做才能使用网络服务?
顺便说一句,我正在使用C#与服务器通信。
你可以使用浏览器,因为Kronos服务器只支持POST请求,浏览器正在发出GET请求。 原因是因为Kronos需要在主体中使用XML,而POST是最合适的方法。
访问Kronos XML API的方法是将WebRequest设置为您将Method设置为POST的URL,如下所示:
HttpWebRequest reqFp = (HttpWebRequest)HttpWebRequest.Create(KronosServerUrl); reqFp.Method = "POST"; reqFp.ContentType = "text/xml";
请注意ContentType如何也设置为text / xml。
此外,您需要确保在Kronos的function访问配置文件中检查XML API访问权限。
正如Nick指出的那样 , 您可以使用XML POST请求与Kronos API进行通信。
虽然您发送请求的方法可能有所不同,但请求格式和API入口点( wfc/XmlService
)应适用于所有语言。
第1章:了解XML API
WFC v5.0开发人员工具包程序员指南 1提供了使用各种语言与Kronos API进行通信的一般指南。 第一章介绍了XML API,它是所有API请求的发送方式。
登录请求
Kronos WFC的标准XML登录请求。 必须先在任何其他请求之前发送。
样品回复:
注销请求
此注销请求将结束您的活动Kronos会话。
支付期间总请求
此请求加载2017年10月20日至2017年10月27日期间员工12345
的支付期总计。
第2章:使用XML API
本章介绍了有关如何向Kronos发送XML请求的特定于语言的示例。 它包括Java和Visual Basic的示例。 ( 对于Python,请参阅kronos-wfc-login.py
)
请注意,这些示例相当简单。 我建议您查看一个更新的XML或HTTP请求库,该库特定于您使用的任何语言。
基于Java的实现 2
使用Java语言有八个步骤:
使用以下URL字符串打开与服务器的HTTP连接:
URL url = new URL("http://localhost/wfc/XmlService"); HttpURLConnection conn = (HttpURLConnection)url.openConnection();
请记住将
http://localhost
替换为服务器的URL通过将HTTP方法设置为“POST”并将内容类型设置为“text / xml”来配置连接,如下所示:
conn.setRequestMethod("POST"); conn.setRequestProperty("Content-type", "text/xml");
您建立的HTTP连接用于输入(发送XML
)和输出(读取XML
)。 您还必须确保任何代理服务器或中间网关不会尝试缓存
或
。
conn.setDoOutput(true); conn.setDoInput(true); conn.setUseCaches(false);
设置连接的cookie。 最初,在第一次连接到服务器时,cookie集将为空。 但是,Logon
的
将返回一组必须保存并在后续HTTP请求中发回的cookie。
Vector cookies = new Vector(); … //set the cookie values - if available for (int i=0; i
将XML文本写为HTTP请求的一部分。
String xml_send = " … " PrintWriter out = new PrintWriter(new OutputStreamWriter(conn.getOutputStream())); out.println(xml_send); out.close();
连接到服务器。
conn.connect();
从服务器打开响应。
InputStream is = conn.getInputStream();
阅读回复。 来自服务器的HTTP响应将包含XML API响应。 对于Logon请求,字符串
xml_recv
包含响应。int size = conn.getContentLength(); byte[] dataBytes = new byte[size]; int bytesRead = 0; int pos = 0; //read stream into byte array while ( (bytesRead >= 0) && (pos < size)) { if ((bytesRead = is.read(dataBytes, pos, size-pos)) >= 0) { pos = pos + bytesRead; } } String xml_recv = new String(dataBytes, 0, size); is.close();
从响应中读取cookie并将其存储以用于后续HTTP请求。
int j = 1;// while (true) { String key = conn.getHeaderFieldKey(j); if (key==null) break; else if (key.equals("Set-Cookie")) { String value = conn.getHeaderField(j); cookies.addElement(value); } j++; }
Visual Basic实现
在本节中,最后一节中用Java实现的相同基本步骤是在Visual Basic中实现的。 此比较显示Visual Basic通过内部管理cookie和大部分HTTP连接处理简化了过程。
以下
Inet1 COM object
处理HTTP请求的调用,如下所示:Dim sPost As String Dim sAction As String Dim sXMLData As String Dim sHTTPHeaders As String sPost = "POST" sAction = "http://localhost/wfc/XmlService" sXMLData = "
" sHTTPHeaders = "Content-type: text/xml" ' Inet1 object is an instance ' of the msinet.ocx control ' placed on the current form Inet1.Execute sAction, sPost, sXMLData, sHTTPHeaders
有用的资源
- WFC v5.0开发人员工具包程序员指南
- Kronos产品的文档和服务包 ( 需要登录 )
- WFC-API.js - 用于将XML请求发送到WFC API的JavaScript
- TimeCardView - Kronos API的开源Web UI
- Kronos社区论坛
脚注:
1 : 引用的文档最初是为Kronos WFC 5.0(API 1.0)编写的。 虽然最高6.3的版本应该使用相同的API,但我无法保证其他版本的准确性。 (请参阅XML API版本6.3到8.0升级 )
2 : 下面的代码示例来自2004年。使用HTTP库可以大大简化Java实现。
不仅是XML Access,而且用户还必须启用远程api访问