标签:请求 get 访问 star 字符串解析 blank cti style http请求
在工程应用中,通常回有这么一种情况:将数据按照一定的格式打包发送出去,或者将接收到的数据按照某种个是进行解析。
假设现在想向服务器请求一个网页内容:
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> 正文
标签:请求 get 访问 star 字符串解析 blank cti style http请求
原文地址:http://www.cnblogs.com/canyudeguang/p/6926933.html