我真的需要提取的信息是:如何最有效地解析C中的這個HTTP請求?
一)它是否是一個GET
要求
二)文件地址(例如的index.html)
C)的主機信息(例如本地主機:8081)
我剛纔有這樣做的代碼(請參閱我的帖子的底部),但它似乎效率低下,相當靜態,並且不會提取主機信息。
所以我想有一個理智的解決方案來解析HTTP請求在C.乾杯!
HTTP請求
GET /index.html HTTP/1.1
Host: localhost:8081
Connection: keep-alive
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.70 Safari/537.17
DNT: 1
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8,en-GB;q=0.6
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
目前代碼
int parsehttp(char *inputstring, int *type, char *getaddress) {
if((strncmp(inputstring, "GET", 3)) == 0) {
*type = 1;
} else {
*type = 0;
}
char firstline[BUFLEN] = "";
int charoffset = getlineend(inputstring); //this function returns the int offset of '\r\n'
strncpy(firstline, inputstring, charoffset-2);
firstline[charoffset-1] = '\0';
sscanf(firstline,"%*s %s %*s",getaddress);
inputstring = (inputstring + charoffset);
return 1;
}
我想說你正在尋找正則表達式的正則表達式。看看一些教程,這應該不是一個大問題:) – dutt 2013-02-15 11:59:09
@dutt如果他嘗試這與正則表達式然後他將有** 2 **問題。 – 2013-02-15 11:59:44
解析來自互聯網的數據的一個理智的解決方案包括檢查緩衝區溢出和各種其他驗證。 – 2013-02-15 12:06:48