请教http中GET和POST问题
http吧
全部回复
仅看楼主
level 1
我要用C语言封装一个http的API,功能就是通过GET或POST上传图片或语音到服务器,下面我贴上我写的未完成的代码,希望各位前辈能够不吝指教,谢谢!
#include <stdio.h>
#include <WinSock2.h>
#include <windows2.h>
#pragmacomment(lib, "ws2_32.lib")
#definePORT6000
#define INVALID_SOCKET -1
#defineSOCKET_ERROR-1
#define BUFSIZE1024
typedef enum
{
voice = 1,
picture,
}Resources;
typedef enum
{
GET = 3,
POST,
}Modes;
void HttpResUpload(char *ip, uint8 type, char *data, uint8 mode)
{
//1 ----加载套接字库
WSAData wsaData;
if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0)
{
MonPrintf("WSAStartup failed");
return -1;
}
//2 ----创建套接字
SOCKET clientSocket = socket(AF_INET, SOCK_STREAM, 0);
if(clientSocket == INVALID_SOCKET)
{
MonPrintf("socket failed");
return -1;
}
//3 ----绑定套接字
sockaddr_in serverAddr;
serverAddr.sin_family = AF_INET;
serverAddr.sin_addr.s_addr = inet_addr(ip);
serverAddr.sin_port = htons(PORT);
//4 ----向服务器发送连接请求
int err = connect(clientSocket, (sockaddr*)&serverAddr, sizeof(serverAddr));
if(SOCKET_ERROR == err)
{
MonPrintf("socket connect failed!");
WSACleanup();
closesocket(clientSocket);
return -1;
}
int len;
char str1[4096], str2[4096], buf[BUFSIZE], *str;
memset(str1, 0, 4096);
memcpy(str1, data, strlen(data)+1);
str = (char *)malloc(128);
memset(str, 0, 128);
len = strlen(str1);
sprintf(str, "%d", len);
memset(str2, 0, 4096);
//5 ----模式判断和操作
if(mode == GET)
{
strcat(str2, "GET ");
}
if(mode == POST)
{
strcat(str2, "POST http://www.example.com HTTP/1.1\n");//请求类型、要访问的资源以及使用的HTTP版本
strcat(str2, "Host: ");
strcat(str2, ip);
strcat(str2, "Content-Type: application/x-www-form-urlencoded\n");
strcat(str2, "Content-Length: ");
strcat(str2, str);
strcat(str2, "\n\n");
strcat(str2, str1);
strcat(str2, "\r\n\r\n");
MonPrintf("%s\n", str2);
}
else
{
MonPrintf("mode error!");
return -1;
}
//----关闭套接字和加载的套接字库
closesocket(clientSocket);
WSACleanup();
return 0;
}
2017年10月15日 10点10分 1
1