2012-07-18 59 views
2

Im在解析http頭文件時遇到了一些麻煩。C,解析一些http頭文件

這裏是我的問題:

char resp[] = "HTTP/1.1 200 OK\r\n" 
      "Content-Type: text/html\r\n" 
      "Content-Length: 4\r\n" 
      "\r\n" 
      "text"; 

// some stuff 
sscanf(resp, "HTTP/%f %d\r\n",&version,&code); 
sscanf(resp, "%*[^]Content-Length: %d",&size); 
//   ^tried several things here 

我想用sscanf的將是一個好主意,因爲我只想得到一些值(如果存在的話)。
我的想法是跳過所有我不想要的標題。

我的問題是:
1-sscanf是個好主意嗎?
2 - 如果不是什麼方法會更好的工作

謝謝。

+0

確定scanf - >壞主意 可能只是使用strstr來搜索我想要的東西並複製它們。 想保持簡單。 我想那些回答的人認爲我知道的比我實際知道的要多。 – Zentdayn 2012-07-18 02:02:10

+0

我沒有看到任何人承擔了你的任何知識......這並不僅僅是因爲你必須獲得更多的知識才能遵循他們的建議。 – 2012-07-18 02:12:18

+1

@JimBalter你是對的,我沒有正確表達自己。 我的意思是說,他們的建議確實需要我獲得更多有關多個主題的知識,但我正在尋找一種解決方案,我可以提出。 我寫的東西聽起來不同,我的母語不一樣,這並沒有幫助我。 – Zentdayn 2012-07-18 02:41:26

回答

3

要第一次訂購一個應該從來沒有使用*scanf函數。

解析HTTP頭比看起來難得多。我首先會看到libcurl是否已經實施了一些可以使用的功能,如果不成功,請直接撥打flexbison

+0

你和@Seth Robertson的答案都對我有好處,我只能接受一個想法。 – Zentdayn 2012-07-18 02:03:35

0

第一個答案:不要這樣做。有足夠奇怪的HTTP編碼和大小寫映射以及其他奇怪的事情,你可能會自己做錯了。但如果你忽略這個好建議,那麼...

第二個答案:不要使用sscanf。它總是以眼淚結束。考慮將字符串通過正則表達式庫並捕獲所需內容,或逐行解析字符串。你可以爲「\ r \ nContent-Length:」做一個strstr,但是這不會停在標題的末尾,並且可能會匹配正文中意想不到的內容。您可以首先搜索\ r \ n \ r \ n並找出結束位置,然後再進行搜索,但此時您正在進行雙重搜索。

1

使用庫的好處是你不必瞭解它們是如何工作的。

使用庫的問題是你不必瞭解它們是如何工作的。

無論您的應用程序是否必須響應某些約束(服務器都會考慮安全性和速度),您將不得不在實現細節上花費更多時間 - 這意味着要理解問題,以便找到合適的解決方案。

這就是編程的全部內容。

提示:不是使用庫可能是處理HTTP標頭解析的最佳方法。

+1

不使用圖書館也是一種不斷重新發明方法的好方法,只是發現你的自制方形滾輪不如圖書館提供的圓形滾輪。除非你的目標是寫一個函數來解析http頭,否則使用一個庫。 – sfstewman 2012-07-18 08:49:56