我有一个XPORT(TCP / IP串行隧道设备)连接到我的微控制器(PIC18),这样我就可以发送转换为TCP / IP包的串行消息。我已启用TCP / IP打包,因此所有字符都将放在一个TCP / IP包中,直到短时间内没有收到任何内容。
我通过tcp / ip隧道成功发送了HTTP GET请求。 虽然当我尝试发送HTTP POST请求时,我要么得到一个" 400 Bad请求"或者我的apache服务器崩溃......
我认为这种行为是因为线端没有,"对"。
我的代码:
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(回车)导致在它之后发送0x00。这会导致网络服务器无法解释请求。
我刚刚向Lantronix支持发送了技术支持问题,但我也想知道是否有人可以告诉我:
验证微控制器的输出:
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)
答案 0 :(得分:1)
我终于找到了解决方案!
经过一些(逻辑)思考后,我发现这将是XPORT的问题。 但问题可能是什么?我禁用了我认为可能会干扰的所有功能(即使我认为这会导致此类错误,这是不合逻辑的)并且在保存之后,POST请求刚好在我的服务器中弹出...
请在此处查看设置(可能希望在新标签中将其打开):