我想通过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帖子标题以便发送二进制数据。
任何帮助都会感激不尽。
答案 0 :(得分:1)
我看到的一个问题是你将二进制数据(unsigned char)复制到"字符串" (char)变量。
我看到的最简单方法是发出两个send()调用:
此外,您需要将内容类型设置为" application / octet-stream"。内容类型为" x-www-form-urlencoded"二进制数据是完全错误的。