从http请求中提取号码

时间:2018-10-03 10:44:59

标签: c

我想从C中的HTTP Get请求中提取一些数字。 例如,如果我的HTTP请求是:

GET /getUIKVal?mdn=9860436150 HTTP/1.1
Host: api.end.point

我希望将号码9860436150打印为输出。 我已经尝试过sscanf()和atoi()

2 个答案:

答案 0 :(得分:1)

您可以像下面一样简单地使用sscanf

char* line = "GET /getUIKVal?mdn=9860436150 HTTP/1.1";
long long val ;

int ret = sscanf(line, "%*[^=]=%lld",&val);
printf("%lld\n", val) ;

%*[^=]=将在哪里读取并丢弃字符串,直到到达= 并且%ld将在val中读取实际数字。

答案 1 :(得分:0)

您可以使用strstr来识别标记mdn=,然后扫描数字或字符串。请注意,扫描号码不需要复制相应的内容。下面的代码显示了如何:

const char* content = "GET /getUIKVal?mdn=9860436150 HTTP/1.1";
const char* startOfNumber = strstr(content,"mdn=");
if (startOfNumber) {
   startOfNumber += strlen("mdn=");
   long number;
   if (scanf("%ld",&number)==1) {
      printf("the number is... %ld", number);
   } else {
      printf("no valid number after 'mdn='");      
   }
} else {
      printf("marker 'mdn=' not found.");      
}

实际上,我更喜欢strstr解决方案,而不是scanf标识标记和数字的解决方案,因为那时很难推理语法错误。