首页 > 代码库 > 字符串解析
字符串解析
在工程应用中,通常回有这么一种情况:将数据按照一定的格式打包发送出去,或者将接收到的数据按照某种个是进行解析。
假设现在想向服务器请求一个网页内容:
char request[1024]={0}; sprintf(request, "GET /%s HTTP/1.0\r\n" "Host: %s\r\n" "Accept: */*\r\n" "Connection: Keep-Alive\r\n" "User-Agent: Mozilla/5.0 (compatible; Qteqpidspider/1.0;)\r\n" "Referer: %s\r\n\r\n", url->path, url->domain, url->domain); write(fd, request, strlen(request));
这里涉及到http请求报文格式:
<request-line> 请求行,包括请求类型,要访问的资源,http版本 <headers> 头部,说明服务器要使用的附加信息 <blank line> 空行 <request-body> 任意数据组成的主体
接收到服务器回传的信息,需要进行解析:
typedef struct Header{ char *content_type; int status_code; }Header; Header * parse_header(char *header) { char *start = header; char *p = NULL; char **sps; Header *h = (Header*)calloc(1, sizeof(Header)); if((p=strstr(start, "\r\n")) != NULL){ *p=‘\0‘; sps = strsplit(start, ‘ ‘, &c, 2); if(c==3) h->status_code = atoi(sps[1]) else h->status_code = 600; start= p+2; } while((p = strstr(start, "\r\n")) != NULL) { *p = ‘\0‘; sps = strsplit(start, ‘:‘, &c, 1); if(c == 2) if(strcasecmp(sps[0], "content-type") == 0) h->content_type = strdup(sps[1]); start = p+2; } return h; }
这里涉及到http的响应报文:
<status-line> 状态行 <headers> 消息报头 <blank line> 空行 <response-body> 正文
字符串解析
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。