以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- REST API 怎么获取post数据 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=151258) |
-- 作者:zhutangxin -- 发布时间:2020/6/19 2:32:00 -- REST API 怎么获取post数据 老师你好, 我们一个供应商给我们提供亮灯取货的硬件,供应商在硬件PLC里写了一些程序,当在硬件上操作的时候,会主动向服务器用POST的方法提交的json数据,请问怎么获取这个json数据? 供应商的说明文档如下。问题在第2点http://server-ip/confirm-task (server-ip是Foxtable中的HttpServer的IP地址,端口只能用80)中怎么获得POST的json. 供应商说这是REST Api。 <!--[if !supportLists]-->1.
<!--[endif]-->获取作业接口(拣货单、上架单、盘点单) Endpoint: http://server-ip/get-job?jobNo=PK0001 Methods: GET Content-type: application/json Return Data: { id:
23456, jobNo:
‘PK0001’, //纸质单上的条码:PK: 拣货单;
PT: 上架单; CT:
盘点单 tasks:
[ { id:
12345, location:
’12-2-1’, reqQty:
15 }, { id:
12346, location:
’13-2-2’, reqQty:
123 } ] } <!--[if !supportLists]-->2.
<!--[endif]-->任务完成接口(在一个货位上的拣货、上架或盘点操作为一个任务) Endpoint: http://server-ip/confirm-task Methods: POST Content-type: application/json Post Data: { id:
12345, type:
‘PK’, // PK: 拣货单; PT: 上架单; CT: 盘点单 location:
‘12-2-1’, reqQty:
15, //请求数量 cfmQty:
14 //确认数量 } Return Data: { result:
1, //1 for success, and 0 for failed message:
‘error reason’ } |
-- 作者:zhutangxin -- 发布时间:2020/6/19 2:36:00 -- REST Api参考: https://blog.csdn.net/xpj8888/article/details/89487354 REST服务器(四)REST服务器POST请求:EndPoint、Method、ContentType、PostData/Json格式数据 测试工具: http://cdn.ouapi.com//postjson_windows.zip
|
-- 作者:zhutangxin -- 发布时间:2020/6/19 2:55:00 -- ![]() ![]() |
-- 作者:zhutangxin -- 发布时间:2020/6/19 2:58:00 -- 代码: Select Case e.Path Case "get-job" Dim job As String job = e.GetValues("jobNo") \' 纸质单上的条码:PK: 拣货单; PT: 上架单; CT: 盘点单 Dim jobDetail As String = Functions.Execute("GetJob", job) e.WriteString(jobDetail) Case "confirm-task" \'Dim url As String = "http://" & _ip & "/confirm-task" \'Dim rqst As System.Net.HttpWebRequest = System.Net.HttpWebRequest.Create(url) \'Dim rsps As System.Net.HttpWebResponse = rqst.GetResponse \'Dim stm As System.IO.Stream = rsps.GetResponseStream() \'Dim reader As New System.IO.StreamReader(stm) \'Dim str As String = reader.ReadToEnd \'rsps.Close \'stm.Close \'reader.close \'MessageBox.Show(str)
\'这个地方不知道怎么获得POST DATA e.WriteString("{""result"":1}") End Select
|
-- 作者:有点蓝 -- 发布时间:2020/6/19 8:46:00 -- Case "confirm-task" msgbox(e.PlainText) Dim sb As New StringBuilder sb.AppendLine("通过GET方式提交的数据:") For Each key As String In e.GetValues.Keys sb.AppendLine(key & ":" & e.GetValues(key) ) Next sb.AppendLine("<br/><br/>通过POST方式提交的数据:") For Each key As String In e.PostValues.Keys sb.AppendLine(key & ":" & e.PostValues(key)) Next msgbox(sb.ToString) 调试看看有没有数据
|
-- 作者:zhutangxin -- 发布时间:2020/6/19 9:37:00 -- 试过了,没有数据,二次Msgbox的信息如下 ![]() ![]() |
-- 作者:zhutangxin -- 发布时间:2020/6/19 9:43:00 -- 帮助里提到了Values的二个子集,但没有提到Values的全集获取方法。帮助里的PostValues应该是表单提交数据,每个数据都有key,但硬件返回的数据是以json提交的,没有key, 所以才不知道怎么获得它。 HttpReqquest事件还有两个字典属性,他们是Values的子集: GetValues:
字典,仅包括通过GET方式提交的数据。 |
-- 作者:有点蓝 -- 发布时间:2020/6/19 9:43:00 -- 供应商的说明文档发上来看看 |
-- 作者:zhutangxin -- 发布时间:2020/6/19 9:43:00 -- 接口说明如下: 任务完成接口(在一个货位上的拣货、上架或盘点操作为一个任务) Endpoint: http://server-ip/confirm-task Methods: POST Content-type: application/json Post Data: { id: 12345, type: ‘PK’, // PK: 拣货单; PT: 上架单; CT: 盘点单 location: ‘12-2-1’, reqQty: 15, //请求数量 cfmQty: 14 //确认数量 } Return Data: { result: 1, //1 for success, and 0 for failed message: ‘error reason’ } |
-- 作者:有点蓝 -- 发布时间:2020/6/19 9:44:00 -- 供应商的说明文档发上来看看 |