轉載請聲明出處!
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/xxx.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_read 40 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'){ //去掉最后的干擾值 0 44 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 }
