最近做个小工具,要获得网页的验证码,并显示出来,把经验来分析一下。

要获得验证码,先的取得相应的URL,这个就不多说了。我用的CInternetSession,和CHttpConnection,贴代码:

CString strFileURLInServer=_T("http://captcha.qq.com/getimage?aid=1007901&r=0.6972409240712645");
CString strFileLocalFullPath = _T("124.PNG");
CInternetSession session;
CHttpConnection* pHttpConnection = NULL;
CHttpFile* pHttpFile = NULL;
CString strServer, strObject;
INTERNET_PORT wPort;
DWORD dwType;
char* pszBuffer = NULL;  
AfxParseURL(strFileURLInServer, dwType, strServer, strObject, wPort);
pHttpConnection = session.GetHttpConnection(strServer,
dwType == AFX_INET_SERVICE_HTTP ? NORMAL_CONNECT : SECURE_CONNECT, wPort);
pHttpFile = pHttpConnection->OpenRequest(CHttpConnection::HTTP_VERB_GET, strObject, 
NULL, 1, NULL, NULL, (dwType == AFX_INET_SERVICE_HTTP ? NORMAL_REQUEST : SECURE_REQUEST));
if(pHttpFile->SendRequest() == FALSE)
return  ;
DWORD dwStateCode;
pHttpFile->QueryInfoStatusCode(dwStateCode);
if(dwStateCode == HTTP_STATUS_OK)
{

HANDLE hFile = CreateFile(strFileLocalFullPath, GENERIC_WRITE,
FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL,
NULL);  //创建本地文件
if(hFile == INVALID_HANDLE_VALUE)
{
pHttpFile->Close();
pHttpConnection->Close();
session.Close();
return  ;
}
char szInfoBuffer[1000];  //返回消息
DWORD dwFileSize = 0;   //文件长度
DWORD dwInfoBufferSize = sizeof(szInfoBuffer);
BOOL bResult = FALSE;
bResult = pHttpFile->QueryInfo(HTTP_QUERY_CONTENT_LENGTH,
(void*)szInfoBuffer,&dwInfoBufferSize,NULL);
dwFileSize = atoi(szInfoBuffer);
const int BUFFER_LENGTH = 1024 * 10;
pszBuffer = new char[BUFFER_LENGTH];  //读取文件的缓冲
DWORD dwWrite, dwTotalWrite;
dwWrite = dwTotalWrite = 0;
UINT nRead = pHttpFile->Read(pszBuffer, BUFFER_LENGTH); //读取服务器上数据
while(nRead > 0)
{

WriteFile(hFile, pszBuffer, nRead, &dwWrite, NULL);  //写到本地文件
dwTotalWrite += nRead;
nRead = pHttpFile->Read(pszBuffer, BUFFER_LENGTH);
}

delete[]pszBuffer;
pszBuffer = NULL;
CloseHandle(hFile);
}

注意保存图片的格式,我原来下载的图片格式是PNG的,所以我代码里面用的"124.PNG",要显示PNG图片,可以用Graphics

Image image(124.PNG); 
Graphics *graphics=NULL;
Graphics *graphics2=NULL;
HDC hdc = ::GetDC(GetDlgItem(IDC_PIC)->m_hWnd);
graphics2 = graphics->FromHDC(hdc);
graphics2->DrawImage(&image,0,0,60,20);

用Graphics是注意开始调用GdiplusStartup,结束后GdiplusShutdown,多的不说了,我上传工程例子。

http://download.csdn.net/detail/ll305vc/5255280

例子里面不是用的QQ,12306的地址,需要修改一下,12306不能获得的,确认安装了安全文件。

获得验证码,显示PNG图片相关推荐

  1. php验证码显示碎图片,我的验证码只显示破碎的小图片

    源自:2-1 验证码制作 我的验证码只显示破碎的小图片 header("content-type:image/gif"); //通过GD库做验证码 //创建画布 session_s ...

  2. PHP用户登录界面验证码显示为“X”(验证码图片无法显示)解决办法

    1.验证码显示为"X". 2.代码浏览: 1> Login.php代码,经检查,没有问题! <?php    require_once "common.php ...

  3. java 验证码 中文乱码_问题记录-java图片验证码显示乱码

    部署机器 操作系统:centos 7 java版本: java version "1.7.0_80" 问题症状 将一个java web的程序部署到了两台配置相同的服务器上之后(服务 ...

  4. 部署到docker容器后图片验证码显示不出来

    Dockerfile如下: FROM openjdk:8-jre-alpine ARG JAR_FILE COPY ${JAR_FILE} app.jar ENTRYPOINT ["java ...

  5. 验证码显示不出来的的原因

    ThinkPHP中使用Verify类生产验证码不显示的原因 今天在做网站部署的时候,发现登录页面的验证码显示不出来了,而且不报任何错误. 直接通过url访问该操作也不能显示. 后来在网上查找了一些解决 ...

  6. JEECMS的新浪图集在IE9、10不能显示大图片BUG的解决方法

    2019独角兽企业重金招聘Python工程师标准>>> 最近我给学校对外交流合作处做的网站,因为是学java开发,所以就基于JEECMS去做. 等到项目做好,差不多要 交工的时候,发 ...

  7. img 服务器上的图片不显示图片,img显示服务器图片不显示

    img显示服务器图片不显示 内容精选 换一换 您可根据需求自定义下发消息内容,例如新增场景:终端用户发送"应用魔方"时,聊天机器人自动回复该产品介绍给用户.在"ChatB ...

  8. 显示乱七八糟图片问题之解决

    今天早上在群里有网友求助说电脑程序中多出了很多乱七八糟的图片,不知道怎么回事.(具体请参阅"求助:显示乱七八糟图片解决方法征集"[url]http://starger.blog.5 ...

  9. framebuffer显示JPEG图片

    framebuffer显示JPEG图片 2011-05-03 20:14:45 分类: 嵌入式 转自http://www.linuxsense.org/archives/281.html http:/ ...

最新文章

  1. SpringBoot + Redis:模拟 10w 人的秒杀抢单!
  2. php+tcpdf+表格,PHP中使用TCPDF生成PDF文档实例
  3. 从前端程序员的视角看小程序的稳定性保障
  4. LNMP - Nginx配置防盗链
  5. Nginx服务器的Web请求处理机制
  6. linux完整面授视频,Linux面授实战
  7. 工业交换机常见问题汇总!
  8. 拦截游戏窗口被移动_Ruined King官网版-拳头rpg Ruined King游戏最新版下载v1.0
  9. Python中if name main的作用
  10. SVN学习总结(3)——分支合并
  11. Android 四大组件学习之Service五
  12. 「每天一道面试题」AQS是什么?了解其内部同步队列实现结构吗?
  13. android苹果耳机音量调节,安卓线控耳机怎么调节音量大小?
  14. Excel文档中字符型数据转化为数字类型
  15. springboot 报错“LoggerFactory is not a Logback LoggerContext but Logback is on the classpath.” 解决方式
  16. js实现十大经典排序算法
  17. java水平测试_【考试】java基础知识测试,看你能得多少分?
  18. 解决飞鸽传书看不到自己想要找的好友
  19. 代码块的渲染类型选择测试
  20. cocos1.6.2升级 cocos1.9.3后 微信登陆闪退

热门文章

  1. 放弃幻想,全面拥抱 Transformer:自然语言处理三大特征抽取器(CNN/RNN/TF)比较(上篇)... 1
  2. 1688接口 -电商代购
  3. vue中实现列表无缝滚动
  4. 查找和免费下载文献的方式汇总
  5. 筑梦远航 势不可挡|和数研究院四周岁啦
  6. 懒人必学常用的Shell脚本(运维之光)
  7. VR全景拍摄制作,全景VR助力行业数字化宣传!
  8. 聚划算霸占淘宝“六宫格”
  9. 致可爱的仙女程序“媛“们
  10. String数组排序去重