【发布时间】:2015-10-20 19:00:21
【问题描述】:
我还有一个问题。现在我正在尝试编写一个可以从标准 HTTP 标头中成功提取帖子数据的函数。
例如,如果我传入的 HTTP 标头是:
GET / HTTP/1.0
Host: example.com
postdata=1&otherdata=2&whatever=3
我只想检索:
postdata=1&otherdata=2&whatever=3
为符合标准,\r\n 必须在代码中生成以指示新行。
目前,该函数不返回任何内容,但如果我删除&& !strstr(p1,"\r\n"),则返回 HTTP 标头中除第一行之外的每一行。
函数参数从左到右依次为:传入的HTTP数据、输出的数据、要检索的最大大小。
然后我会通过以下方式从另一个程序调用该函数:
char result[500];
char* httppostdata=gethttpdata();
gethttppost(httppostdata,result,500);
我们必须在上面假设 gethttpdata 返回一个指向实际 HTTP 数据的有效指针。
这是需要修复的功能:
unsigned long gethttppost(char* in,char* res,unsigned long max){
char *p2,*p1=in;unsigned long mx;
while ((p1=strstr(p1,"\r\n"))){
p1+=2;
if ((p2=strstr(p1,"\r\n\r\n")) && !strstr(p1,"\r\n")){
mx=(unsigned long)(p2-p1);
if (mx > max){mx=max;}
memcpy(res,p1,mx);
return mx;
}
}
return 0;
}
【问题讨论】:
-
您的 HTTP 标头是否总是包含单词
postdata? -
并非总是如此。可能是随机的