C++ 与 php 的交互 之----- C++ 获取 网页文字内容,获取 php 的 echo 值。

转载请声明出处!

https://cloud.tencent.com/developer/user/1148436/activities

      距离上次 谈 C++ 制作json 或者其他数据传送给 服务器,时隔两个多月。

      链接:https://cloud.tencent.com/developer/article/1011359

      这次是从服务器上 中获取 文字内容到控制台,或者写入本地文本等操作,废话不多说,开讲。

-----------------------------------------------------------分割线-------------------------------------------------------------

      测试服务器是: 新浪云 sea;

      测试内容:获取 由 php 脚步从服务器中 读取出来的 数据,我这里是 微信用户的openID;

      工具:VS 2012;

先上直观的图片,后上文本源码

      总体例子

核心函数

对于多字节wchar 到 lpcswtr 的转化函数介绍,请转到 该链接

https://cloud.tencent.com/developer/article/1010979

 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 }

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Linux驱动

2.制作第一个驱动程序

先讲解驱动框架,然后写出first_drv驱动程序,来打印一些信息 写出first_drv驱动程序需要以下几步: (1)写出驱动程序first_drv_open...

1815
来自专栏zingpLiu

Python 【web框架】之Flask

flask 是Python实现的轻量级web框架。没有表单,orm等,但扩展性很好。很多Python web开发者十分喜欢。本篇介绍flask的简单使用及其扩展...

1152
来自专栏爱撒谎的男孩

用户管理模块之个人信息修改

9062
来自专栏IT技术精选文摘

RMI原理及实现

1 简介 RMI是远程方法调用的简称,像其名称暗示的那样,它能够帮助我们查找并执行远程对象的方法。通俗地说,远程调用就象将一个class放在A机器上,然后在B机...

1868
来自专栏微信公众号:Java团长

Java开发进销存管理系统(二)

在进行进销存系统的设计和编码之前,首先设计一个自己的底层框架,这个底层框架在之后可以作为其它具体项目开发的一个基础,从而不必每次开发项目时,都去做很多重复的工作...

2394
来自专栏Java学习之路

Struts2学习---基本配置,action,动态方法调用,action接收参数 动态方法调用action接收参数

首先我们先来直接配置,然后再来讲原理: 第一步:jar包的引入: 我们可以到struts2的官网上下载: http://struts.apache.org...

2907
来自专栏开发与安全

linux网络编程之System V 消息队列(二):消息队列实现回射客户/服务器和 msgsnd、msgrcv 函数

一、msgsnd 和 msgrcv 函数   #include <sys/types.h>   #include <sys/ipc.h>   #inclu...

2060
来自专栏落影的专栏

为何百兆静态库能打进数兆的可执行文件?

前言 第三方库是工程开发必不可少的部分,而第三方库可以是.a和.framework的静态库,也可以是.framework的动态库,其中静态库是最常用的方式。 ...

4808
来自专栏Linux驱动

第3阶段——内核启动分析之prepare_namespace()如何挂载根文件系统和mtd分区介绍(6)

内核启动并初始化后,最终目的是像Windows一样能启动应用程序,在windows中每个应用程序都存在C盘、D盘等,而linux中每个应用程序是存放在根文件系统...

4438
来自专栏你不就像风一样

MongoDB非关系型数据库开发手册

NoSQL,指的是非关系型的数据库。NoSQL有时也称作Not Only SQL的缩写,是对不同于传统的关系型数据库的数据库管理系统的统称。

1122

扫码关注云+社区