2010-08-08 70 views
3

我在C中構建簡單的http狀態檢查器。我已完成了網絡部分,但是我在字符串操作方面遇到了問題。這裏它是如何工作的:C字符串插值

$ ./client http://domain.com/path.html#anchor 
200 

該實用程序只是在命令行輸出給定頁面的狀態。我需要將給定的字符串解析爲主機名和請求路徑。我還建立了一個「模板」的字符串與此定義:

#define HTTP_GET_MSG "GET %s HTTP/1.1\nUser-Agent: my-agent-0.01\nHost: %s\n\n" 

我想知道我應該如何處理解析URL(主機和路徑)的插值到這個定義字符串send()之前,荷蘭國際集團,以套接字?

+5

你應該知道在HTTP協議行尾'\ r \ N',不是簡單的'\ N'。 – You 2010-08-08 11:43:31

+0

已注意。謝謝!! – Eimantas 2010-08-08 12:17:58

回答

5

一個簡單的方法是用sprintf:

char req[ SOME_SUITABLE_SIZE ]; 
sprintf(req, HTTP_GET_MSG, host, path); 

但除非你選擇「主機」和「路徑」的長度事前這將是vunerable緩衝區溢出。如果你的系統有snprintf就可以避免這一點:

snprintf(req, SOME_SUITABLE_SIZE, HTTP_GET_MSG, host, path); 
+0

這將起作用。我只需要事先計算總的'req'大小。謝謝! – Eimantas 2010-08-08 11:39:08