C语言,http报文,post请求,求大神详解

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言,http报文,post请求,求大神详解相关的知识,希望对你有一定的参考价值。

我想把一段加密的内容发给服务器,自己的内容存放在buffer数组里了,这样写有问题吗?POST后面要加URL吗?
strcat((char *)send_buf,(const char *)"POST /HTTP/1.1");
strcat((char *)send_buf,(const char *)"\r\n");
strcat((char *)send_buf,(const char *)"Host:192.168.0.52:2261");
strcat((char *)send_buf,(const char *)"\r\n");
strcat((char *)send_buf,(const char *)"contentType:utf-8");
strcat((char *)send_buf,(const char *)"\r\n");
strcat((char *)send_buf,(const char *)"Content-Type:application/x-www-form-urlencoded");
strcat((char *)send_buf,(const char *)"\r\n");
strcat((char *)send_buf,(const char *)"Content-Length:len1 ");
strcat((char *)send_buf,(const char *)"\r\n");
strcat((char *)send_buf,(const char *)"\r\n");
len = strlen(send_buf);
for( i = len,j = 0;j < len1; i++,j++)

send_buf[i] = buffer[j];

strcat((char *)send_buf,(const char *)"\r\n");

参考技术A URL要放在POST和HTTP/1.1之间,注意加空格。

URL好像不需要域名部分。

C++ socket传送和接收结构体问题,求大神帮忙

结构体:
struct SendPackage

char opcode[32];
char SendMessage[1024];
char ReturnMessage[1024];
char ReturnCode[2];
;
类:

class CSubscriber

public:
CSubscriber(CSubscriber &subs);
CSubscriber();
virtual ~CSubscriber();
char p_subsid[20+1];
char p_custid[20+1];
char p_Acctid[20+1];
char p_Userid[20+1];
char p_ServerNum[20+1];
char p_Subsname[50+1];
char p_Status[50+1];
;
客户端代码:
SendPackage SendBi;//结构体
strcpy(subs.p_subsid,"123456");//subs是CSubscriber的对象。
strcpy(SendBi.SendMessage,(char*)&subs);
int SendLength = send(p_ClientSocket,
(char*)&SendBi,
sizeof(SendPackage),
0);
服务端代码:
ReceiveLen=recv(p_NewSocket, // 新的套接字句柄
p_ReceiveBuffer, // 接收套接字的缓冲区
2060, // 缓冲区的大小
0); // 标志为 0

得到的buffer是个结构体,我就想得到subs.p_subsid

发送者: 把结构体对象 通过 序列化 变成二进制缓存,然后 传输这个缓存。

接受者: 把接受二进制缓存 通过序列化 再组建成结构体对象
这个是现在最通用的标准

建议你使用下boost::serialization
参考技术A 在服务端也要定义这样的结构体
结构体:
struct SendPackage

char opcode[32];
char SendMessage[1024];
char ReturnMessage[1024];
char ReturnCode[2];
;
然后:
ReceiveLen=recv(p_NewSocket, // 新的套接字句柄
p_ReceiveBuffer, // 接收套接字的缓冲区
sizeof(struct SendPackage) , // 缓冲区的大小
0);
struct SendPackage *p_stu = (struct SendPackage*)p_ReceiveBuffer ;
cout << "sbusid=" << p_stu->SendMessage ;

但是看你前面的程序,好象有点问题吧:
strcpy(subs.p_subsid,"123456");//subs是CSubscriber的对象。
strcpy(SendBi.SendMessage,(char*)&subs); //肿么能将一个CSubscriber的对象拷贝到一个字符数组中去呢?
参考技术B int SendLength = send(p_ClientSocket,
(char*)&SendBi,
sizeof(SendPackage),
0);

(char*)&SendBi, 换为subs.p_subsid,大小换位 sizeof(subs.p_subsid)追问

说白了,我是要传结构体而后去解析结构体。不是想传单纯的值

以上是关于C语言,http报文,post请求,求大神详解的主要内容,如果未能解决你的问题,请参考以下文章

HTTP请求行、请求头、请求体详解

HTTP请求行、请求头、请求体详解

C++ socket传送和接收结构体问题,求大神帮忙

HTTP请求行请求头请求体详解(转)

用java做一个httpClient 发送https 的get请求,需要证书验证的那种,求大神指点一下!

C语言结构体编程题,求大神!