HTTP-POST方法内容长度过大,多次发送的问题

李老四 2013-07-25 11:09:25
请教HTTP-POST方法使用时,当要上传内容长度Content-Length超过IP包长度限制如10000,一般是如何处理的?
{
"POST /ems/php/emud.php HTTP/1.0\r\n"
"Host: 192.168.52.69\r\n"
"Connection: close\r\n"
"Content-Type: application/x-www-form-urlencoded\r\n"
"Content-Length: 10000\r\n"
"\r\n"
"information=xxxxxxxxxxxxxxxxx"
};

可以把要发送的内容拆分成:头字符串/数据内容/数据内容/数据内容... 再多次调用send()发送出去,发送完所有数据再close(),这样可行吗?发送头字符串时,Connection: 是否要定义为Keep-Alive?

感谢!
...全文
1441 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
island0209 2013-12-14
  • 打赏
  • 举报
回复
进来关注一下,虽然没有POST这么大的包,不过也学习了。
whysoft 2013-12-13
  • 打赏
  • 举报
回复
判断头是根据字符串中的连续回车符 判断内容是根据根据Content-Length或超时。
李老四 2013-07-29
  • 打赏
  • 举报
回复
谢谢cirrusdev Content-Length应该写总长度吧, 头和包内容分开的话,不知道接收端 服务器处理过程是如何的?应该是把所有内容包都接收完了再组合起来传给应用层吧?那接收端服务器是怎样识别接收结束呢?根据Content-Length吗?
cirrusdev 2013-07-27
  • 打赏
  • 举报
回复
引用 2 楼 xqing_lee 的回复:
于是我就想 POST内容是否也可以分成多次发,按照 头+内容+内容...这样发,但初步试了一下好像不成功。。 但如果不可行,那POST大文件一般又是怎么发送的呢?拆成多个POST发送吗?
TCP包就1024Bbtes,如果不能分开发送就没办法弄了。 注意把Content-Length算准确了,再加上Keep-Alive应该可以。 其实IE的post也是包括头何包内容分开的。
woshi_ziyu 2013-07-26
  • 打赏
  • 举报
回复
看看下面的代码
if (!(HTTPStatus & HTTP_SEND_PAGE))        // init byte-counter and pointer to webside
      {                                          // if called the 1st time
        HTTPBytesToSend = sizeof(WebSide) - 1;   // get HTML length, ignore trailing zero
        PWebSide = (unsigned char *)WebSide;     // pointer to HTML-code
      }

      if (HTTPBytesToSend > MAX_TCP_TX_DATA_SIZE)     // transmit a segment of MAX_SIZE
      {
        if (!(HTTPStatus & HTTP_SEND_PAGE))           // 1st time, include HTTP-header
        {
          memcpy(TCP_TX_BUF, GetResponse, sizeof(GetResponse) - 1);
          memcpy(TCP_TX_BUF + sizeof(GetResponse) - 1, PWebSide, MAX_TCP_TX_DATA_SIZE - sizeof(GetResponse) + 1);
          HTTPBytesToSend -= MAX_TCP_TX_DATA_SIZE - sizeof(GetResponse) + 1;
          PWebSide += MAX_TCP_TX_DATA_SIZE - sizeof(GetResponse) + 1;
        }
        else
        {
          memcpy(TCP_TX_BUF, PWebSide, MAX_TCP_TX_DATA_SIZE);
          HTTPBytesToSend -= MAX_TCP_TX_DATA_SIZE;
          PWebSide += MAX_TCP_TX_DATA_SIZE;
        }
          
        TCPTxDataCount = MAX_TCP_TX_DATA_SIZE;   // bytes to xfer
   //     InsertDynamicValues();                   // exchange some strings...
        TCPTransmitTxBuffer();                   // xfer buffer
      }
      else if (HTTPBytesToSend)                  // transmit leftover bytes
      {
        memcpy(TCP_TX_BUF, PWebSide, HTTPBytesToSend);
        TCPTxDataCount = HTTPBytesToSend;        // bytes to xfer
  //      InsertDynamicValues();                   // exchange some strings...
        TCPTransmitTxBuffer();                   // send last segment
        TCPClose();                              // and close connection
        HTTPBytesToSend = 0;                     // all data sent
      }

      HTTPStatus |= HTTP_SEND_PAGE;              // ok, 1st loop executed
李老四 2013-07-26
  • 打赏
  • 举报
回复
谢谢斑竹回复! 很巧,我前面正是受这段代码启发,这段代码看起来应该是Server响应客户端的GET请求,返回HTML网页的处理,应该是可行的; 于是我就想 POST内容是否也可以分成多次发,按照 头+内容+内容...这样发,但初步试了一下好像不成功。。 但如果不可行,那POST大文件一般又是怎么发送的呢?拆成多个POST发送吗?

27,509

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧