POST 原始到服务器处理

POST raw to server Processing

我有一个 Intel Edison 运行 一个 Node.JS 服务器,它正在将我 post 的所有内容打印到控制台中。我可以使用 Postman 成功 post 并在控制台中看到发送的原始数据。

现在我正在使用 Processing 对其进行 POST,这将触发 Node.JS 服务器上的不同事件。

我的问题是我似乎无法成功 POST 原始 body 到服务器,我已经尝试了好几个小时了。

import processing.net.*; 

String url = "192.168.0.107:3000";
Client myClient;


void setup(){
    myClient = new Client(this, "192.168.0.107", 3000);
    myClient.write("POST / HTTP/1.1\n");
    myClient.write("Cache-Control: no-cache\n");
    myClient.write("Content-Type: text/plain\n");
    //Attempting to write the raw post body
    myClient.write("test");
    //2 newlines tells the server that we're done sending
    myClient.write("\n\n");
}

控制台显示服务器收到 POST 和正确的 headers,但没有显示其中的任何数据。

如何指定 "test" 是原始 POST 数据?

来自 Postman 的 HTTP 代码:

POST  HTTP/1.1
Host: 192.168.0.107:3000
Content-Type: text/plain
Cache-Control: no-cache
Postman-Token: 6cab79ad-b43b-b4d3-963f-fad11523ec0b

test

Postman POST 的服务器输出:

{ host: '192.168.0.107:3000',
  connection: 'keep-alive',
  'content-length': '4',
  'cache-control': 'no-cache',
  origin: 'chrome-extension://fhbjgbiflinjbdggehcddcbncdddomop',
  'content-type': 'text/plain',
  'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.111 Safari/537.36',
  'postman-token': 'd17676a6-98f4-917c-955c-7d8ef01bb024',
  accept: '*/*',
  'accept-encoding': 'gzip, deflate',
  'accept-language': 'en-US,en;q=0.8' }
test

我的服务器输出 POST 来自 Processing:

{ host: '192.168.0.107:3000',
  'cache-control': 'no-cache',
  'content-type': 'text/plain' }
{}

我刚刚弄明白哪里出了问题,我需要添加 content-length header 来告诉服务器要监听多少数据,然后在数据前换行。

最终代码:

import processing.net.*; 

String url = "192.168.0.107:3000";
Client myClient;

void setup(){
    myClient = new Client(this, "192.168.0.107", 3000);
    myClient.write("POST / HTTP/1.1\n");
    myClient.write("Cache-Control: no-cache\n");
    myClient.write("Content-Type: text/plain\n");
    myClient.write("content-length: 4\n");     
    myClient.write("\n");
    myClient.write("test");
    myClient.write("\n\n");
}