C++ 與 php 的交互 之----- C++ 獲取 網頁文字內容,獲取 php 的 echo 值。


轉載請聲明出處!

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 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM