在Groovy中接收HTTP POST请求

时间:2017-01-04 13:27:58

标签: curl groovy http-post inputstream

我创建了一个简单的服务器,它接受客户端的连接请求并读取客户端发布的请求。取决于请求体中的一些值,我想用一些字符串来回应。如果服务器没有收到客户端的任何请求,它只是向客户端发送了一些整数值。以下是代码。

def server = new ServerSocket(2000)
println("Waiting for connection")

String receivedRecord ;
while (true) 

{
  println " Input data "
server.accept() { socket ->
          socket.withStreams { input, output ->
                def w = new BufferedWriter(new OutputStreamWriter(output))

        String message = "Connection was successful"
        println message
 def r = new BufferedReader(new InputStreamReader(input))

 println ("Stream ")

String requestMessage = ""
 while (true)
  { 
        String tempMsg = r.readLine() 
        requestMessage = requestMessage  +   tempMsg
        println (requestMessage)
   }       

      int  i = 0;

while (i <20)
{
    //String requestMessage = r.readLine()

    //println(" Request Received ")
    //println(requestMessage)

    String echo = "EchoRequestMsg"
    String vehicleSync = "EenheidSynchronisatieRequestMsg"

    if(requestMessage != null )
    {

        if(requestMessage.toLowerCase().contains(echo.toLowerCase()))
        {
            println (i)
            println ("Echo Request True ")
            sendMessage("Echo", w)
            println(" Echo Message Sent ")

        }
        else if(requestMessage.toLowerCase().contains(vehicleSync.toLowerCase()))
        {     
            println (i)
            println (" Vehicle Sync True ")       
            sendMessage("VehicleSync", w)
            println(" Vehicle Sync Message Sent ")
        }
        else
        {
            println (i)
            println (" push message ")
            i++;
            sendMessage(i, w)
        }

       }   
      }
     }
    }
   }
def sendMessage(msg, writer) {
    println("Sending: >" + msg + "<")
    writer.writeLine(msg.toString())
    writer.flush();
}

它只接收http Header而不是正文。我已经通过cURL发布了请求。

来自cURL的追踪数据:

== Info: Rebuilt URL to: http://localhost:2000/
== Info:   Trying ::1...
== Info: Connected to localhost (::1) port 2000 (#0)
=> Send header, 0000000122 bytes (0x0000007a)
0000: 50 4f 53 54 20 2f 20 48 54 54 50 2f 31 2e 31 0d POST / HTTP/1.1.
0010: 0a 48 6f 73 74 3a 20 6c 6f 63 61 6c 68 6f 73 74 .Host: localhost
0020: 3a 32 30 30 30 0d 0a 41 63 63 65 70 74 3a 20 2a :2000..Accept: *
0030: 2f 2a 0d 0a 63 6f 6e 74 65 6e 74 2d 74 79 70 65 /*..content-type
0040: 3a 74 65 78 74 2f 78 6d 6c 0d 0a 53 4f 41 50 41 :text/xml..SOAPA
0050: 63 74 69 6f 6e 3a 75 72 6e 3a 67 65 74 42 61 6e ction:urn:getBan
0060: 6b 0d 0a 43 6f 6e 74 65 6e 74 2d 4c 65 6e 67 74 k..Content-Lengt
0070: 68 3a 20 33 31 31 0d 0a 0d 0a                   h: 311....
=> Send data, 0000000311 bytes (0x00000137)
0000: 3c 73 6f 61 70 65 6e 76 3a 45 6e 76 65 6c 6f 70 <soapenv:Envelop
0010: 65 20 78 6d 6c 6e 73 3a 73 6f 61 70 65 6e 76 3d e xmlns:soapenv=
0020: 22 68 74 74 70 3a 2f 2f 73 63 68 65 6d 61 73 2e “xxxxxxxxxxxxxx
0030: 78 6d 6c 73 6f 61 70 2e 6f 72 67 2f 73 6f 61 70 xmlsoap.org/soap
0040: 2f 65 6e 76 65 6c 6f 70 65 2f 22 20 78 6d 6c 6e /envelope/" xmln
0050: 73 3a 76 31 3d 22 68 74 74 70 3a 2f 2f 67 6d 73 s:v1="http://gms
0060: 2e 70 6f 6c 69 74 69 65 2e 6e 6c 2f 62 72 6f 6b .xxxxxxxxx/brok
0070: 65 72 2f 77 65 62 73 65 72 76 69 63 65 2f 6d 6f er/webservice/mo
0080: 64 65 6c 2f 76 31 22 3e 3c 73 6f 61 70 65 6e 76 del/v1"><soapenv
0090: 3a 48 65 61 64 65 72 2f 3e 20 3c 73 6f 61 70 65 :Header/> <soape
00a0: 6e 76 3a 42 6f 64 79 3e 20 3c 76 31 3a 45 63 68 nv:Body> <v1:Ech
00b0: 6f 52 65 71 75 65 73 74 4d 73 67 3e 20 3c 41 66 oRequestMsg> <Af
00c0: 7a 65 6e 64 65 72 3e 20 3c 43 6f 64 65 3e 20 58 zender> <Code> X
00d0: 58 58 58 58 20 3c 2f 43 6f 64 65 3e 20 3c 54 79 XXXX </Code> <Ty
00e0: 70 65 3e 20 58 58 58 58 58 20 3c 2f 54 79 70 65 pe> XXXXX </Type
00f0: 3e 20 3c 2f 41 66 7a 65 6e 64 65 72 3e 20 3c 2f > </Afzender> </
0100: 76 31 3a 45 63 68 6f 52 65 71 75 65 73 74 4d 73 v1:EchoRequestMs
0110: 67 3e 20 20 3c 2f 73 6f 61 70 65 6e 76 3a 42 6f g>  </soapenv:Bo
0120: 64 79 3e 20 3c 2f 73 6f 61 70 65 6e 76 3a 45 6e dy> </soapenv:En
0130: 76 65 6c 6f 70 65 3e                            velope>
== Info: upload completely sent off: 311 out of 311 bytes

Groovy脚本收到的输入:

    groovy groovyServer.groovy 
Waiting for connection
 Input data 
 Input data 
Connection was successful
Stream 
POST / HTTP/1.1
Host: localhost:2000
Accept: */*
content-type:text/xml
SOAPAction:urn:getBank
Content-Length: 311

任何帮助将不胜感激。谢谢。

0 个答案:

没有答案