通过C中的http POST发送二进制数据

时间:2014-05-22 14:49:48

标签: c http post embedded http-post

我想通过HTTP POST方法从pic32嵌入式主板向php http服务器发送一些二进制数据。我的服务器将回复他将收到的数据。 我从服务器获得0x20而不是0x2b(' +')。

我的功能是

void send_post_query(void)
{
        char *hname = "www.example.com";
        char *page = "/test/testAES.php";
        char *poststr = "status=";
        char * data_string ="This is to be encrypted before sending";
        unsigned char encoded_data[512];
        unsigned int encoded_data_length;
        char status_string[512];
        unsigned char data_string[512];
        unsigned char header_lenght=0;

        //Encode string 
        encoded_data_length= EncryptSendingPacket(data_string,strlen(data_string),encoded_data);

        //create query
        snprintf(status_string, 512,
         "POST %s HTTP/1.1\r\n"
         "Host: %s\r\n"
         "Content-type: application/x-www-form-urlencoded\r\n"
         "Content-length: %d\r\n\r\n"
                 "%s", page, hname, encoded_data_length+strlen(poststr),poststr);
        header_lenght=strlen(status_string);
        //Append data through string
        memcpy(status_string+header_lenght,encoded_data,encoded_data_length);
        //Send data through an open socket
        send(ulSocket, status_string, header_lenght+encoded_data_length,0);

}

我发现了一些关于' Content-Type':' application / octet-stream'的使用的帖子。但在改变这一点时,甚至从服务器收到的任何字节都没有。 (我根本不知道如何使用&c;来自c的内容类型'应用程序/八位字节流。)请帮我填写此http帖子标题以便发送二进制数据。

任何帮助都会感激不尽。

1 个答案:

答案 0 :(得分:1)

我看到的一个问题是你将二进制数据(unsigned char)复制到"字符串" (char)变量。

我看到的最简单方法是发出两个send()调用:

  • 1表示标题数据
  • 1表示二进制数据(正文)

此外,您需要将内容类型设置为" application / octet-stream"。内容类型为" x-www-form-urlencoded"二进制数据是完全错误的。