2017-06-21 35 views
1

我想發一個http請求,獲取網站內容並檢查一個特定元素。目前我正在使用lcurl(從教程中獲得解釋)。這裏是我的代碼摘錄:從c網站獲取價值的最快方法

curl_global_init(CURL_GLOBAL_ALL); 
CURL *myHandle; 
CURLcode result; 
struct BufferStruct output; 
output.buffer = NULL; 
output.size = 0; 

//requested value is on this website 
char* url = "https://www.somewebsite.com"; 

//set curl handle to write the website content into buffer 
myHandle = curl_easy_init(); 
curl_easy_setopt(myHandle, CURLOPT_WRITEFUNCTION, WriteMemoryCallback); 
curl_easy_setopt(myHandle, CURLOPT_WRITEDATA, (void*)&output); 
curl_easy_setopt(myHandle, CURLOPT_URL, url); 
curl_easy_perform(myHandle); 

//searching for position of the requested value. 
uint8_t* value_position = strstr(output.buffer, "value_description"); 
//copy the value (8 chars) into a buffer defined earlier 
strncpy(value, value_position, 8); 
//... clean up etc. 

該代碼有效。但我不知道這是否是最快的方法... 任何想法如何更快地做到這一點?非常感謝!

+2

歡迎來到StackExchange。但是,你似乎在錯誤的網站上;對於基本工作代碼的改進建議,您可能需要訪問https://codereview.stackexchange.com。但是,如果您的代碼的某個部分存在特定問題,請詳細解釋,此處的人員將很樂意提供幫助。你可能想要參加[遊覽]並閱讀[問]。當你這樣做時:歡迎來到StackOverflow,這是Q/A網站的特定程序問題。 – Yunnosch

+2

我投票結束這個問題作爲題外話,因爲對於基本工作代碼的改進建議,你可能想要去codereview.stackexchange.com。 – Stargateur

+0

@Yunnosch完美!老師教我! – Stargateur

回答

0

我想做一個http請求,獲取網站內容並檢查一個特定的元素......但我不知道這是否是最快的方式。

首先,在這種情況下,「快速」是相對的,因爲您的瓶頸是帶寬,而不是CPU。接下來,如果你正在做的是試圖找到從網頁內容特定的元素,你可以使用telnet或者如果你有ncat安裝在系統上,你可能只是做類似如下:

echo "GET /index.php" | ncat www.somewebsite.com 80 | grep "value_description" 

這可以根據需要進行腳本和調整,但是可以使用grepsed和/或awk來挖掘數據,而無需構建C應用程序。

希望能有所幫助。

+1

在grep中,您可以添加-m 1參數以在第一次匹配後停止搜索,並添加選項,例如-C 3如果需要添加上下文行(例如3行)。第一場比賽後停止將允許ncat停止傳輸,如果在數據開始附近發現「value_description」,可能會降低帶寬。 – Brandin