標籤:
轉載請聲明出處!
http://www.cnblogs.com/linguanh/category/633252.html
距離上次 談 C++ 製作json 或者其他資料傳送給 伺服器,時隔兩個多月。
連結:http://www.cnblogs.com/linguanh/p/4340119.html
這次是從伺服器上 中擷取 文字內容到控制台,或者寫入本地文本等操作,廢話不多說,開講。
-----------------------------------------------------------分割線-------------------------------------------------------------
測試伺服器是: 新浪雲 sea;
測試內容:擷取 由 php 腳步從伺服器中 讀取出來的 資料,我這裡是 使用者的openID;
工具:VS 2012;
先上直觀的圖片,後上文本源碼
總體例子
核心函數
對於多位元組wchar 到 lpcswtr 的轉化函數介紹,請轉到 該連結
http://www.cnblogs.com/linguanh/p/4241939.html
1 #include <iostream> 2 #include <fstream> 3 #include <Windows.h> 4 #include <wininet.h> 5 #define MAXBLOCKSIZE 28+1 // openID 固定長 28 6 #pragma comment(lib,"wininet.lib") //引入動態庫 7 8 char* getWeiXinFromUserNameFromSEA(const char*); 9 using namespace std;10 11 int main(){12 char *p=NULL; //用於存放返回結果13 p=getWeiXinFromUserNameFromSEA("http://913337456-my.stor.sinaapp.com/fun.txt");14 15 cout<<p;16 return 0 ; 17 } 18 19 //我這裡設定了函數 帶有 傳回值,大家可以不適用傳回值!20 char* getWeiXinFromUserNameFromSEA(const char *Url){21 char *str = new char[MAXBLOCKSIZE]; // 用於最後返回的結果,動態分配22 const char *x="From_AF"; int i = 0;//第一個是開啟標記,i是下面的轉化控制變數 23 WCHAR exchange_text_from_url[256],exchange_text_from_x[256];24 LPCWSTR py = exchange_text_from_url;// url 轉 lpcwstr 的中間變數25 LPCWSTR pz = exchange_text_from_x; //另外的資訊26 //unicode編碼 下的 設定,我這裡使用了寬位元組,免去轉換的麻煩27 MultiByteToWideChar( 0, 0,x, -1,exchange_text_from_x, 64 );//WCHAR to LPCWSTR,轉化28 MultiByteToWideChar( 0, 0,Url, -1, exchange_text_from_url, 256 );29 //結束轉化30 HINTERNET handle_for_init_internet = InternetOpen("From_AF", INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0);31 if (handle_for_init_internet != NULL){32 HINTERNET handle_for_read_info = InternetOpenUrl(handle_for_init_internet, Url, NULL,NULL,NULL,NULL);33 if (handle_for_read_info != NULL){34 char result[MAXBLOCKSIZE]; //用於儲存 緩衝區的資料群組合35 char buffer[MAXBLOCKSIZE];//下載檔案的緩衝區36 DWORD bytes_read = 1;//下載的位元組數37 BOOL temp_boolean;38 while(bytes_read!=0){ 39 //使用 InternetReadFile 從緩衝區 讀取 資料到 buffer 字串,要度的位元組數是 buffer的有效長度,控制是 bytes_read40 temp_boolean = InternetReadFile(handle_for_read_info,buffer,sizeof(buffer), &bytes_read); 41 }42 for(i;i<MAXBLOCKSIZE-1;i++){43 if(i==MAXBLOCKSIZE-2 && buffer[i]==‘0‘){ //去掉最後的幹擾值 044 45 }else if(buffer[i]>=34 && buffer[i]<=126){ //多種測試,最終還是使用 ASCII 碼範圍判斷來解決了 燙燙燙~~~~46 //cout<<buffer[i]; //通過使用迴圈 針對性地 輸出單個 字元消除緩衝區的其他混雜 空量47 //這裡不直接搞出 buffer 是因為,緩衝區裡有很多 不知什麼資料在輸出的時候會變成很多燙,一般是空才會有燙48 result[i]=buffer[i]; //經過測試,這個逐個賦值能夠去掉 其中夾雜的 燙~~~49 }50 } 51 result[i]=‘\0‘; //賦值 結尾 符,防止 自身爆 燙52 strcpy(str,result); //copy 給 字串指標,用於返回53 //安全操作,銷毀控制代碼54 InternetCloseHandle(handle_for_read_info); handle_for_read_info = NULL;55 }56 InternetCloseHandle(handle_for_init_internet); handle_for_init_internet = NULL;57 return str;58 } 59 }
C++ 與 php 的互動 之----- C++ 非同步擷取 網頁文字內容,非同步擷取 php 的 echo 值。