我有一个连接到我的微控制器(PIC18)的XPORT(TCP/IP串行隧道设备),这样我可以发送串行消息,这些消息被转换成TCP/IP包。我已经启用了TCP/IP打包,这样所有的字符将被放入一个TCP/IP包,直到短时间内没有收到任何东西。Lantronix XPORT - 发送HTTP POST请求的TCP/IP隧道
我已成功通过tcp/ip隧道发送HTTP GET请求。 虽然当我尝试发送一个HTTP POST请求,我要么得到一个“400错误的请求”或我的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在它之后被发送。这将导致Web服务器无法解释请求。
我刚刚发送的技术支持问题Lantronix的支持,但我也想知道,如果谁能告诉我,如果:
- Lantronix的XPORT一个0X0D后发送为0x00 ?
- 我的HTTP POST请求在另一种方式是错误的? (缺少内容长度?)
验证微控制器的输出:所述XPORT的
设置是相同的端子和应该是相同的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)
请问这个问题得到更好的问电气工程堆栈交流? - 我在这里发布它的原因是因为它涉及到网络/ wireshark/http-post,这会更适合在这里? – Paul