Lantronix XPORT - TCP/IP 隧道发送 HTTP POST 请求
Lantronix XPORT - TCP/IP tunnel to send HTTP POST requests
我有一个 XPORT(TCP/IP 串行隧道设备)连接到我的微控制器 (PIC18),这样我就可以发送串行消息,这些消息被转换成 TCP/IP 包。我启用了 TCP/IP 打包,这样所有字符都会被放在一个 TCP/IP 包中,直到在短时间内没有收到任何东西。
我已经通过 tcp/ip 隧道成功发送了一个 HTTP GET 请求。
虽然当我尝试发送 HTTP POST 请求时,我要么收到“400 错误请求”,要么我的 Apache 服务器崩溃了...
我认为这种行为是因为没有行结束,"right"。
我的代码:
Delay1KTCYx(160);
xportSendTextNoLine("C192.168.200.18/80\n");//Manual connect to server (xport command)
Delay1KTCYx(160);//Wait for TCP/IP packaging.
xportSendTextNoLine("POST /debug.php HTTP/1.1");
xportSend(0x0D);//Carriage return.
xportSend(0x0A);//New line
xportSendTextNoLine("Host: 192.168.200.18");
xportSend(0x0D);//Carriage return.
xportSend(0x0A);//New line
xportSendTextNoLine("Content-Type: application/x-www-form-urlencoded");
xportSend(0x0D);//Carriage return.
xportSend(0x0A);//New line
xportSend(0x0D);//Carriage return.
xportSend(0x0A);//New line
xportSendTextNoLine("Grower=2&SiteId=99&Time=2015021108291700&Usertag=testuser&Action=0");
xportSend(0x0D);//Carriage return.
xportSend(0x0A);//New line
xportSend(0x0D);//Carriage return.
xportSend(0x0A);//New line
Delay1KTCYx(160);//Wait for TCP/IP packaging.
Wireshark 输出(简化):
>POST /debug.php HTTP/1.1[0x0D][0x00][0x0A]
Host: 192.168.200.18[0x0D][0x00][0x0A]
etc.
<HTTP/1.1 400 Bad Request
Wireshark 输出(完整):
Lantronix Xport 的 0x0D(回车 Return)似乎导致在其后发送 0x00。这将导致网络服务器无法解释请求。
我刚刚向 Lantronix 支持发送了一个技术支持问题,但我也想知道 是否有人可以告诉我是否:
- Lantronix XPORT 在 0x0D 之后发送 0x00?
- 我的 HTTP POST 请求在另一个方面是错误的? (缺少内容长度?)
验证微控制器的输出:
XPORT的设置与TERMINAL相同,应与MCU相同(否则接收不一样):
MCU串口设置:
RCSTA2bits.SPEN = 1; //Serial port enable
TRISGbits.TRISG2 = 1; //RG2 input (RX)
TRISGbits.TRISG1 = 0; //RG1 output (TX)
ANCON2bits.ANSEL18= 0; //DIGITAL!
ANCON2bits.ANSEL19= 0;
IPR3bits.RC2IP = 1;//High-priority Rx interrupts
PIE3bits.RC2IE = 1;//Enable Rx interrupt
TXSTA2 = 0b00100000;
RCSTA2 = 0b10010000;
BAUDCON2 = 0b01000000;//Receive operation active.
SPBRG2 = 12; // 9615 (0.16% error) (8Mhz)
我终于找到解决办法了!
经过一些(逻辑上的)思考,我发现这将是 XPORT 的问题。
但可能是什么问题?我禁用了我认为可能会干扰的所有功能(尽管我认为这会导致这种错误是不合逻辑的)并且保存后,POST 请求在我的服务器中很好地弹出...
在此处查看设置(可能需要在新标签页中打开它):
我有一个 XPORT(TCP/IP 串行隧道设备)连接到我的微控制器 (PIC18),这样我就可以发送串行消息,这些消息被转换成 TCP/IP 包。我启用了 TCP/IP 打包,这样所有字符都会被放在一个 TCP/IP 包中,直到在短时间内没有收到任何东西。
我已经通过 tcp/ip 隧道成功发送了一个 HTTP GET 请求。 虽然当我尝试发送 HTTP POST 请求时,我要么收到“400 错误请求”,要么我的 Apache 服务器崩溃了...
我认为这种行为是因为没有行结束,"right"。
我的代码:
Delay1KTCYx(160);
xportSendTextNoLine("C192.168.200.18/80\n");//Manual connect to server (xport command)
Delay1KTCYx(160);//Wait for TCP/IP packaging.
xportSendTextNoLine("POST /debug.php HTTP/1.1");
xportSend(0x0D);//Carriage return.
xportSend(0x0A);//New line
xportSendTextNoLine("Host: 192.168.200.18");
xportSend(0x0D);//Carriage return.
xportSend(0x0A);//New line
xportSendTextNoLine("Content-Type: application/x-www-form-urlencoded");
xportSend(0x0D);//Carriage return.
xportSend(0x0A);//New line
xportSend(0x0D);//Carriage return.
xportSend(0x0A);//New line
xportSendTextNoLine("Grower=2&SiteId=99&Time=2015021108291700&Usertag=testuser&Action=0");
xportSend(0x0D);//Carriage return.
xportSend(0x0A);//New line
xportSend(0x0D);//Carriage return.
xportSend(0x0A);//New line
Delay1KTCYx(160);//Wait for TCP/IP packaging.
Wireshark 输出(简化):
>POST /debug.php HTTP/1.1[0x0D][0x00][0x0A]
Host: 192.168.200.18[0x0D][0x00][0x0A]
etc.
<HTTP/1.1 400 Bad Request
Wireshark 输出(完整):
Lantronix Xport 的 0x0D(回车 Return)似乎导致在其后发送 0x00。这将导致网络服务器无法解释请求。
我刚刚向 Lantronix 支持发送了一个技术支持问题,但我也想知道 是否有人可以告诉我是否:
- Lantronix XPORT 在 0x0D 之后发送 0x00?
- 我的 HTTP POST 请求在另一个方面是错误的? (缺少内容长度?)
验证微控制器的输出:
XPORT的设置与TERMINAL相同,应与MCU相同(否则接收不一样):
MCU串口设置:
RCSTA2bits.SPEN = 1; //Serial port enable
TRISGbits.TRISG2 = 1; //RG2 input (RX)
TRISGbits.TRISG1 = 0; //RG1 output (TX)
ANCON2bits.ANSEL18= 0; //DIGITAL!
ANCON2bits.ANSEL19= 0;
IPR3bits.RC2IP = 1;//High-priority Rx interrupts
PIE3bits.RC2IE = 1;//Enable Rx interrupt
TXSTA2 = 0b00100000;
RCSTA2 = 0b10010000;
BAUDCON2 = 0b01000000;//Receive operation active.
SPBRG2 = 12; // 9615 (0.16% error) (8Mhz)
我终于找到解决办法了!
经过一些(逻辑上的)思考,我发现这将是 XPORT 的问题。 但可能是什么问题?我禁用了我认为可能会干扰的所有功能(尽管我认为这会导致这种错误是不合逻辑的)并且保存后,POST 请求在我的服务器中很好地弹出...
在此处查看设置(可能需要在新标签页中打开它):