以文本方式查看主题

-  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
--  

图片点击可在新窗口打开查看此主题相关图片如下:snipaste_2020-06-19_02-54-34.jpg
图片点击可在新窗口打开查看

--  作者: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的信息如下


图片点击可在新窗口打开查看此主题相关图片如下:snipaste_2020-06-19_09-34-57.jpg
图片点击可在新窗口打开查看

图片点击可在新窗口打开查看此主题相关图片如下:snipaste_2020-06-19_09-34-40.jpg
图片点击可在新窗口打开查看


--  作者:zhutangxin
--  发布时间:2020/6/19 9:43:00
--  
帮助里提到了Values的二个子集,但没有提到Values的全集获取方法。帮助里的PostValues应该是表单提交数据,每个数据都有key,但硬件返回的数据是以json提交的,没有key, 所以才不知道怎么获得它。

HttpReqquest事件还有两个字典属性,他们是Values的子集:


GetValues: 字典,仅包括通过GET方式提交的数据。
PostValues:字典,仅包括通过POST方式提交的数据。


--  作者:有点蓝
--  发布时间: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
--  
供应商的说明文档发上来看看