WinInet进阶:发送邮件
上一篇文章http://blog.csdn.net/wangjiannuaa/article/details/6949368阐述了winInet基本使用方法。登录邮箱后干啥?当然是发邮件了~搞了半天终于把程序调通了。
首先还是分析真实的环境,邮件是怎么发送出去的,所谓分析,在这里就是抓包看数据了。
如下图所示,上一篇文章基础,也就是登录邮箱后,动作分解为三步骤:1.进入基本版-2.点击写信-3.点击发送。至于为什么是基本版,前文已有论述,是为了避免繁文缛节,把数据包尽可能得简化。
对应的文本如下
第一步,进入基本版:
GET http://m1.mail.sina.com.cn/basic/ HTTP/1.1
Accept: text/html, application/xhtml+xml, */*
Referer: http://m1.mail.sina.com.cn/basic/listmail.php?fid=new
Accept-Language: zh-CN
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; MAAU)
Accept-Encoding: gzip, deflate
Host: m1.mail.sina.com.cn
Connection: Keep-Alive
Cookie: freeName=jimmy_cmd@sina.com; SINAMAIL-WEBFACE-SESSID=4810c7c33fc1e1c6682bceab4ddef2c6; UOR=,,; U_TRS1=000000b4.2d6a4a30.4dbeccdf.f7085a45; vjuids=-8a3c2a43b.12f673b30db.0.8ab6cd7a91ca3; vjlast=1304434711; SINAGLOBAL=00000049.c6df3442.4e8ecea8.c10d0d3d; ULV=1320821256248:19:9:9:00000042.71d45d8d.4eba2208.9827aebf:1320816503894; ALLYESID4=00110503104143503706036; SGUP=0; mvsign=v%3D%2Atz%3Cc5uhs4CE5F_%24Uf5%3E; loginType=freemail; SHOW_TIP_BOX=1; _s_upa=7; ULOGIN_IMG=13208272802654; Apache=00000042.71d45d8d.4eba2208.9827aebf; SID=BdimHsH8SQooBHNNxsHHNHgo4oBBrWWBBoWHN8nirxHHNoWBgxW8yoW; SPRIAL=d38fb34629f58bca2d47db89f8bcc1f5; SINA_USER=j; U_TRS2=000000a2.1e3514bd.4eba226c.e1f9f60b; SUE=es%3D08613ec0baa20bc5de1c64800beebcd4%26ev%3Dv1%26es2%3Db3819624e7f5c93ed6e9ffd2f7667ccb%26rs0%3DegQRXaekdBX0Cv4RZLVGeN%252BJov2MOCrllf%252BT5K%252FHgqxOfu7Z3F8xlJHKpglceCpId1YzV%252FFh91g5tZvk86raopv99gWgxx%252FfAaEFoC6DeskUGWkmwKVO9yAspaUSOo4SPSzMlZX0Gy%252BkHtU%252BsOx7rVIVjNy6Zezg5oyexRYLOPk%253D%26rv%3D0; SUP=cv%3D1%26bt%3D1320827324%26et%3D1320913724%26lt%3D1%26uid%3D2521991044%26user%3Djimmy_cmd.%252A%252A%26ag%3D9%26name%3Djimmy_cmd%2540sina.com%26nick%3Djimmy_cmd%26sex%3D%26ps%3D0%26email%3Djimmy_cmd%2540sina.com%26dob%3D%26ln%3Djimmy_cmd%2540sina.com%26os%3D%26fmp%3D%26lcp%3D%26us%3D; SWEBAPPSESSID=ff951a6cf52f9a9cdfb8dfd7b67d0b8b; SWMHA=SWMHA137; WTP_VISSTATUS=TRUE; WTP_VISTAB=address
第二步,点击写信:
GET http://m1.mail.sina.com.cn/basic/writemail.php HTTP/1.1
Accept: text/html, application/xhtml+xml, */*
Referer: http://m1.mail.sina.com.cn/basic/
Accept-Language: zh-CN
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; MAAU)
Accept-Encoding: gzip, deflate
Host: m1.mail.sina.com.cn
Connection: Keep-Alive
Cookie: freeName=jimmy_cmd@sina.com; SINAMAIL-WEBFACE-SESSID=4810c7c33fc1e1c6682bceab4ddef2c6; UOR=,,; U_TRS1=000000b4.2d6a4a30.4dbeccdf.f7085a45; vjuids=-8a3c2a43b.12f673b30db.0.8ab6cd7a91ca3; vjlast=1304434711; SINAGLOBAL=00000049.c6df3442.4e8ecea8.c10d0d3d; ULV=1320821256248:19:9:9:00000042.71d45d8d.4eba2208.9827aebf:1320816503894; ALLYESID4=00110503104143503706036; SGUP=0; mvsign=v%3D%2Atz%3Cc5uhs4CE5F_%24Uf5%3E; loginType=freemail; SHOW_TIP_BOX=1; _s_upa=7; ULOGIN_IMG=13208272802654; Apache=00000042.71d45d8d.4eba2208.9827aebf; SID=BdimHsH8SQooBHNNxsHHNHgo4oBBrWWBBoWHN8nirxHHNoWBgxW8yoW; SPRIAL=d38fb34629f58bca2d47db89f8bcc1f5; SINA_USER=j; U_TRS2=000000a2.1e3514bd.4eba226c.e1f9f60b; SUE=es%3D08613ec0baa20bc5de1c64800beebcd4%26ev%3Dv1%26es2%3Db3819624e7f5c93ed6e9ffd2f7667ccb%26rs0%3DegQRXaekdBX0Cv4RZLVGeN%252BJov2MOCrllf%252BT5K%252FHgqxOfu7Z3F8xlJHKpglceCpId1YzV%252FFh91g5tZvk86raopv99gWgxx%252FfAaEFoC6DeskUGWkmwKVO9yAspaUSOo4SPSzMlZX0Gy%252BkHtU%252BsOx7rVIVjNy6Zezg5oyexRYLOPk%253D%26rv%3D0; SUP=cv%3D1%26bt%3D1320827324%26et%3D1320913724%26lt%3D1%26uid%3D2521991044%26user%3Djimmy_cmd.%252A%252A%26ag%3D9%26name%3Djimmy_cmd%2540sina.com%26nick%3Djimmy_cmd%26sex%3D%26ps%3D0%26email%3Djimmy_cmd%2540sina.com%26dob%3D%26ln%3Djimmy_cmd%2540sina.com%26os%3D%26fmp%3D%26lcp%3D%26us%3D; SWEBAPPSESSID=ff951a6cf52f9a9cdfb8dfd7b67d0b8b; SWMHA=SWMHA137; WTP_VISSTATUS=TRUE; WTP_VISTAB=address
第三步,点击发送:
POST http://m1.mail.sina.com.cn/basic/sendmail.php HTTP/1.1
Accept: text/html, application/xhtml+xml, */*
Referer: http://m1.mail.sina.com.cn/basic/writemail.php
Accept-Language: zh-CN
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; MAAU)
Content-Type: multipart/form-data; boundary=---------------------------7db2a861008aa
Accept-Encoding: gzip, deflate
Host: m1.mail.sina.com.cn
Content-Length: 1305
Connection: Keep-Alive
Pragma: no-cache
Cookie: freeName=jimmy_cmd@sina.com; SINAMAIL-WEBFACE-SESSID=4810c7c33fc1e1c6682bceab4ddef2c6; UOR=,,; U_TRS1=000000b4.2d6a4a30.4dbeccdf.f7085a45; vjuids=-8a3c2a43b.12f673b30db.0.8ab6cd7a91ca3; vjlast=1304434711; SINAGLOBAL=00000049.c6df3442.4e8ecea8.c10d0d3d; ULV=1320821256248:19:9:9:00000042.71d45d8d.4eba2208.9827aebf:1320816503894; ALLYESID4=00110503104143503706036; SGUP=0; mvsign=v%3D%2Atz%3Cc5uhs4CE5F_%24Uf5%3E; loginType=freemail; SHOW_TIP_BOX=1; _s_upa=7; ULOGIN_IMG=13208272802654; Apache=00000042.71d45d8d.4eba2208.9827aebf; SID=BdimHsH8SQooBHNNxsHHNHgo4oBBrWWBBoWHN8nirxHHNoWBgxW8yoW; SPRIAL=d38fb34629f58bca2d47db89f8bcc1f5; SINA_USER=j; U_TRS2=000000a2.1e3514bd.4eba226c.e1f9f60b; SUE=es%3D08613ec0baa20bc5de1c64800beebcd4%26ev%3Dv1%26es2%3Db3819624e7f5c93ed6e9ffd2f7667ccb%26rs0%3DegQRXaekdBX0Cv4RZLVGeN%252BJov2MOCrllf%252BT5K%252FHgqxOfu7Z3F8xlJHKpglceCpId1YzV%252FFh91g5tZvk86raopv99gWgxx%252FfAaEFoC6DeskUGWkmwKVO9yAspaUSOo4SPSzMlZX0Gy%252BkHtU%252BsOx7rVIVjNy6Zezg5oyexRYLOPk%253D%26rv%3D0; SUP=cv%3D1%26bt%3D1320827324%26et%3D1320913724%26lt%3D1%26uid%3D2521991044%26user%3Djimmy_cmd.%252A%252A%26ag%3D9%26name%3Djimmy_cmd%2540sina.com%26nick%3Djimmy_cmd%26sex%3D%26ps%3D0%26email%3Djimmy_cmd%2540sina.com%26dob%3D%26ln%3Djimmy_cmd%2540sina.com%26os%3D%26fmp%3D%26lcp%3D%26us%3D; SWEBAPPSESSID=ff951a6cf52f9a9cdfb8dfd7b67d0b8b; SWMHA=SWMHA137; WTP_VISSTATUS=TRUE; WTP_VISTAB=address
-----------------------------7db2a861008aa
Content-Disposition: form-data; name="to"
jimmy_cmd@sina.com
-----------------------------7db2a861008aa
Content-Disposition: form-data; name="cc"
-----------------------------7db2a861008aa
Content-Disposition: form-data; name="bcc"
-----------------------------7db2a861008aa
Content-Disposition: form-data; name="subject"
subject-basic
-----------------------------7db2a861008aa
Content-Disposition: form-data; name="atth1"; filename=""
Content-Type: application/octet-stream
-----------------------------7db2a861008aa
Content-Disposition: form-data; name="atth2"; filename=""
Content-Type: application/octet-stream
-----------------------------7db2a861008aa
Content-Disposition: form-data; name="atth3"; filename=""
Content-Type: application/octet-stream
-----------------------------7db2a861008aa
Content-Disposition: form-data; name="body"
hello-basic-version.
-----------------------------7db2a861008aa
Content-Disposition: form-data; name="saveSent"
1
-----------------------------7db2a861008aa
Content-Disposition: form-data; name="action"
-----------------------------7db2a861008aa
Content-Disposition: form-data; name="a_sendmail"
发 送
-----------------------------7db2a861008aa--
下面,就是要用WinInet API模拟以上三个过程就好了!
- /******************************************************************
- * 向奋战在刀光剑影中的特洛伊勇士们致敬
- * 2011.11.07
- * 于 南京航空航天大学 电子信息工程学院
- ******************************************************************/
- #include<windows.h>
- #include<wininet.h>
- #include <iostream>
- using namespace std;
- #pragma comment(lib,"wininet.lib")
- HINTERNET hSession = NULL;
- HINTERNET hConnect = NULL;
- HINTERNET hRequest = NULL;
- //
- //构造邮件体
- //注意行与行中间没有空格
- //
- void BuildMailContent(PSTR szFormData)
- {
- strcpy(szFormData,"\
- -----------------------------7db2a861008aa\r\n\
- Content-Disposition: form-data; name=\"to\"\r\n\
- \r\n\
- jimmy_cmd@sina.com\r\n\
- -----------------------------7db2a861008aa\r\n\
- Content-Disposition: form-data; name=\"cc\"\r\n\
- \r\n\
- wangjian.nuaa@qq.com\r\n\
- -----------------------------7db2a861008aa\r\n\
- Content-Disposition: form-data; name=\"bcc\"\r\n\
- \r\n\
- \r\n\
- -----------------------------7db2a861008aa\r\n\
- Content-Disposition: form-data; name=\"subject\"\r\n\
- \r\n\
- subject-basic\r\n\
- -----------------------------7db2a861008aa\r\n\
- Content-Disposition: form-data; name=\"atth1\"; filename=\"\"\r\n\
- Content-Type: application/octet-stream\r\n\
- \r\n\
- \r\n\
- -----------------------------7db2a861008aa\r\n\
- Content-Disposition: form-data; name=\"atth2\"; filename=\"\"\r\n\
- Content-Type: application/octet-stream\r\n\
- \r\n\
- \r\n\
- -----------------------------7db2a861008aa\r\n\
- Content-Disposition: form-data; name=\"atth3\"; filename=\"\"\r\n\
- Content-Type: application/octet-stream\r\n\
- \r\n\
- \r\n\
- -----------------------------7db2a861008aa\r\n\
- Content-Disposition: form-data; name=\"body\"\r\n\
- \r\n\
- application-send : send content!\r\n\
- -----------------------------7db2a861008aa\r\n\
- Content-Disposition: form-data; name=\"saveSent\"\r\n\
- \r\n\
- 1\r\n\
- -----------------------------7db2a861008aa\r\n\
- Content-Disposition: form-data; name=\"action\"\r\n\
- \r\n\
- \r\n\
- -----------------------------7db2a861008aa\r\n\
- Content-Disposition: form-data; name=\"a_sendmail\"\r\n\
- \r\n\
- 发 送\r\n\
- -----------------------------7db2a861008aa--\r\n");
- }
- //
- //将返回的页面写入磁盘文件
- //
- BOOL WriteFileToDisk(LPCSTR lpFileName,HINTERNET& hInternet)
- {
- CHAR szRecvBuf[1024+1]; // 接受数据缓冲区
- DWORD dwNumberOfBytesRead; // 服务器返回大小
- DWORD dwRecvTotalSize=0; // 接受数据总大小
- DWORD dwRecvBuffSize=0; // 接受数据buf的大小
- BOOL bReturn = FALSE;
- memset(szRecvBuf,0,1024+1);
- DWORD dwNumberOfBytesWritten ;
- HANDLE hOpenFile = (HANDLE)CreateFileA(lpFileName,GENERIC_WRITE,0,NULL,OPEN_ALWAYS,NULL,NULL);
- if (hOpenFile == INVALID_HANDLE_VALUE)
- {
- hOpenFile = NULL;
- return FALSE;
- }
- do
- {
- bReturn = InternetReadFile(hInternet,szRecvBuf,1024,&dwNumberOfBytesRead);
- if(!bReturn)
- {
- break;
- }
- // 统计接受数据的大小
- szRecvBuf[dwNumberOfBytesRead] = '\0';
- dwRecvTotalSize += dwNumberOfBytesRead;
- dwRecvBuffSize += strlen(szRecvBuf);
- WriteFile(hOpenFile,szRecvBuf,dwNumberOfBytesRead,&dwNumberOfBytesWritten,NULL);
- } while (dwNumberOfBytesRead !=0);
- CloseHandle(hOpenFile);
- return TRUE;
- }
- //
- //初始化HINTERNET 建立连接
- //
- BOOL InitionWinInet()
- {
- //InternetOpenA
- LPCSTR lpszAgent = "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; MAAU)";
- DWORD dwAccessType = INTERNET_OPEN_TYPE_PRECONFIG;
- hSession = InternetOpenA(lpszAgent,dwAccessType,NULL,NULL,0);
- if (!hSession)
- {
- return FALSE;
- }
- return TRUE;
- }
- //
- //模拟点击登录邮箱
- //
- BOOL ClickToLoginEmail()
- {
- //InternetConnectA
- LPCSTR lpszServerName = "mail.sina.com.cn";
- INTERNET_PORT nServerPort = INTERNET_DEFAULT_HTTP_PORT;
- DWORD dwService = INTERNET_SERVICE_HTTP;
- hConnect = InternetConnectA(hSession,lpszServerName,nServerPort,NULL,NULL,dwService,0,1);
- if (!hConnect)
- {
- return FALSE;
- }
- //HttpOpenRequestA
- LPCSTR lpszVerb = "POST";
- LPCSTR lpszObjectName = "cgi-bin/login.php"; //网站的对象名,网址在InternetConnectA第二个参数指定
- LPCSTR lpszVersion = "HTTP/1.1";
- LPCSTR lpszReferrer = "http://mail.sina.com.cn/cgi-bin/login.php";
- LPCSTR lpszAcceptTypes = "text/html, application/xhtml+xml, */*";
- DWORD dwFlags = INTERNET_FLAG_RELOAD;
- hRequest = HttpOpenRequestA(hConnect,lpszVerb,lpszObjectName,lpszVersion,lpszReferrer,&lpszAcceptTypes,dwFlags,1);
- if (!hRequest)
- {
- return FALSE;
- }
- //HttpSendRequestA
- LPCSTR lpszHeaders = "Content-Type: application/x-www-form-urlencoded\r\n";
- DWORD dwHeadersLength=-1L;
- char szFormData[1024]={0};
- strcpy(szFormData,"logintype=uid&u=jimmy_cmd&psw=123abc&product=mail&%B5%C7%C2%BC=%B5%C7+%C2%BC\r\n");
- LPVOID pBuf = (LPVOID)szFormData;
- BOOL bReturn = HttpSendRequestA(hRequest,lpszHeaders,dwHeadersLength,pBuf,strlen(szFormData));
- if(!bReturn)
- {
- return FALSE;
- }
- LPCSTR lpFileName = "login.html";
- WriteFileToDisk(lpFileName,hRequest);
- return TRUE;
- }
- //
- //模拟点击到基本版
- //
- BOOL ClickToBasicVersion()
- {
- LPCSTR lpszUrl = "http://m1.mail.sina.com.cn/basic/";
- hRequest = InternetOpenUrlA(hSession,lpszUrl,NULL,0,INTERNET_FLAG_RELOAD,0);
- if (!hRequest)
- {
- return FALSE;
- }
- LPCSTR lpFileName = "basic.html";
- WriteFileToDisk(lpFileName,hRequest);
- return TRUE;
- }
- //
- //模拟点击写信按钮
- //
- BOOL ClickToWrite()
- {
- LPCSTR lpszUrl = "http://m1.mail.sina.com.cn/basic/writemail.php ";
- hRequest = InternetOpenUrlA(hSession,lpszUrl,NULL,0,INTERNET_FLAG_RELOAD,0);
- if (!hRequest)
- {
- return FALSE;
- }
- LPCSTR lpFileName = "write.html";
- WriteFileToDisk(lpFileName,hRequest);
- return TRUE;
- }
- //
- //模拟点击发送邮件
- //
- BOOL ClickSendEmail()
- {
- //InternetConnectA
- LPCSTR lpszServerName = "m1.mail.sina.com.cn";
- INTERNET_PORT nServerPort = INTERNET_DEFAULT_HTTP_PORT;
- DWORD dwService = INTERNET_SERVICE_HTTP;
- hConnect = InternetConnectA(hSession,lpszServerName,nServerPort,NULL,NULL,dwService,0,1);
- if (!hConnect)
- {
- return FALSE;
- }
- //HttpOpenRequestA
- LPCSTR lpszVerb = "POST";
- LPCSTR lpszObjectName = "basic/sendmail.php"; //网站的对象名,网址在InternetConnectA第二个参数指定
- LPCSTR lpszVersion = "HTTP/1.1";
- LPCSTR lpszReferrer = "http://m1.mail.sina.com.cn/basic/writemail.php";
- LPCSTR lpszAcceptTypes = "text/html, application/xhtml+xml, */*";
- DWORD dwFlags = INTERNET_FLAG_RELOAD;
- hRequest = HttpOpenRequestA(hConnect,lpszVerb,lpszObjectName,lpszVersion,lpszReferrer,&lpszAcceptTypes,dwFlags,1);
- if (!hRequest)
- {
- return FALSE;
- }
- //HttpSendRequestA
- LPCSTR lpszHeaders = "Content-Type: multipart/form-data; boundary=---------------------------7db2a861008aa\r\n";
- DWORD dwHeadersLength=-1L;
- CHAR szContentData[10240]={0};
- BuildMailContent(szContentData);
- LPVOID pBuf = (LPVOID)szContentData;
- BOOL bReturn = HttpSendRequestA(hRequest,lpszHeaders,dwHeadersLength,pBuf,strlen(szContentData));
- if(!bReturn)
- {
- return FALSE;
- }
- return TRUE;
- }
- //
- //主函数
- //
- void main()
- {
- BOOL isOK = FALSE ;
- do
- {
- if (!InitionWinInet()){
- break;
- }
- cout<<"InitionWinInet finished."<<endl;
- if (!ClickToLoginEmail()){
- break;
- }
- cout<<"ClickToLoginEmail finished."<<endl;
- if (!ClickToBasicVersion()){
- break;
- }
- cout<<"ClickToBasicVersion finished."<<endl;
- if (!ClickToWrite()){
- break;
- }
- cout<<"ClickToWrite finished."<<endl;
- if (!ClickSendEmail()){
- break;
- }
- cout<<"ClickSendEmail finished."<<endl;
- } while (FALSE);
- cout<<"Press any key to quit."<<endl;
- getchar();
- InternetCloseHandle(hSession);
- InternetCloseHandle(hConnect);
- InternetCloseHandle(hRequest);
- }
测试得到的,写入磁盘的html文件可以辅助直观感受这个过程,也展示一下:
WinInet进阶:发送邮件相关推荐
- 进阶的阿牛哥之用python向多人发送邮件(带附件)、遍历邮件获取内容(两种方法:imbox、imaplib)
(一)向多人发送邮件(带附件) 一.使用的库 这个程序涉及两个库:smtplib 和 email 这两个库都是Python自带的,所以不需要额外的下载安装. 二.思路和步骤 总体思路很简单,就像我们平 ...
- 高效办公,如何利用Python自动发送邮件
自动发送邮件 我们把报表做出来以后一般都是需要发给别人查看,对于一些每天需要发的报表或者是需要一次发送多份的报表,这个时候可以考虑借助Python来自动发送邮件. 使用邮箱的第一步 一般我们在使用QQ ...
- Spring Boot中使用JavaMailSender发送邮件
相信使用过Spring的众多开发者都知道Spring提供了非常好用的JavaMailSender接口实现邮件发送.在Spring Boot的Starter模块中也为此提供了自动化配置.下面通过实例看看 ...
- java 发送邮件_老板要实现SpringBoot发送邮件?大神发了这篇文章后,今晚准点下班...
正文开始前,分享阿里 P8 资深架构师吐血总结的 <Java 核心知识体系&面试资料.pdf> 阿里 P8 级资深架构师吐血总结的一份 Java 核心知识.pdf, 内容覆盖很广, ...
- android+发邮件,Android发送邮件的方法实例详解
Android发送邮件的方法实例详解 时间:2021-05-20 本文实例讲述了Android发送邮件的方法.分享给大家供大家参考,具体如下: 在android手机中实现发送邮件的功能也是不可缺少的. ...
- SpringBoot之发送邮件
1.pom配置 <dependencies><dependency><groupId>org.springframework.boot</groupId> ...
- [安全攻防进阶篇] 七.恶意样本检测之编写代码自动提取IAT表、字符串及时间戳溯源
系统安全绕不开PE文件,PE文件又与恶意样本检测及分析紧密相关.前文作者带领大家逆向分析两个CrackMe程序,包括逆向分析和源码还原.这篇文章主要介绍了PE文件基础知识及恶意样本检测的三种处理知识, ...
- (转载)SpringBoot 发送邮件和附件
什么是SMTP? SMTP全称为Simple Mail Transfer Protocol(简单邮件传输协议),它是一组用于从源地址到目的地址传输邮件的规范,通过它来控制邮件的中转方式.SMTP认证要 ...
- scrapy学习笔记(二)进阶使用
From:https://www.imooc.com/article/21839 scrapy提升篇之配置:https://segmentfault.com/a/1190000009321902 前面 ...
最新文章
- C++builder XE 安装控件 及输出路径
- 独家 | 一文盘点数据集市和数据仓库的差异(附链接)
- Django模型(三)
- ftp获取远程Pdf文件
- GNU/Linux下有多少是GNU的?
- 自动推荐图表、智能分析,这个新出的分析工具有点酷!
- 计算机系统设计 片上系统 pdf,一种基于过程级编程模型的可重构片上系统设计方法.pdf...
- 10-10-定时邮件发送
- 【SpringBoot_ANNOTATIONS】自动装配 01 @Autowired @Qualifier @Primary
- mysql游标嵌套怎么写,mysql游标和嵌套游标
- JAVA8免费下载安装(win10)
- 将mysql驱动包添加到项目依赖
- HSF框架日常问题记录1
- px和毫米的换算_px与厘米换算(px怎么转换为cm)
- JAVA基础篇-数据依赖性含义
- e 服务器怎么注册不了怎么办,IMVU注册不了怎么办 服务器错误怎么办
- 推荐中使用FNN/PNN/ONN/NFM优化特征交叉
- VCS和Verdi的安装解决问题记录
- python地产成本_Python3抓取 深圳房地产均价数据,通过真实数据为购置不动产做决策分析(二)...
- 为什么要配置Java环境变量以及Java环境变量的配置