带有Cookie功能的HTTP访问函数,GET,PUT/POST

2023-11-03

#define AFX_INET_SERVICE_FTP        INTERNET_SERVICE_FTP
#define AFX_INET_SERVICE_HTTP       INTERNET_SERVICE_HTTP
#define AFX_INET_SERVICE_GOPHER     INTERNET_SERVICE_GOPHER
 
#define AFX_INET_SERVICE_UNK        0x1000
#define AFX_INET_SERVICE_FILE       (AFX_INET_SERVICE_UNK+1)
#define AFX_INET_SERVICE_MAILTO     (AFX_INET_SERVICE_UNK+2)
#define AFX_INET_SERVICE_MID        (AFX_INET_SERVICE_UNK+3)
#define AFX_INET_SERVICE_CID        (AFX_INET_SERVICE_UNK+4)
#define AFX_INET_SERVICE_NEWS       (AFX_INET_SERVICE_UNK+5)
#define AFX_INET_SERVICE_NNTP       (AFX_INET_SERVICE_UNK+6)
#define AFX_INET_SERVICE_PROSPERO   (AFX_INET_SERVICE_UNK+7)
#define AFX_INET_SERVICE_TELNET     (AFX_INET_SERVICE_UNK+8)
#define AFX_INET_SERVICE_WAIS       (AFX_INET_SERVICE_UNK+9)
#define AFX_INET_SERVICE_AFS        (AFX_INET_SERVICE_UNK+10)
#define AFX_INET_SERVICE_HTTPS      (AFX_INET_SERVICE_UNK+11)
	// Global Functions
 
	BOOL ParseURLWorker(LPCTSTR pstrURL,
		LPURL_COMPONENTS lpComponents, DWORD& dwServiceType,
		INTERNET_PORT& nPort, DWORD dwFlags)
	{
		// this function will return bogus stuff if lpComponents
		// isn't set up to copy the components
 
		assert(lpComponents != NULL && pstrURL != NULL);
		if (lpComponents == NULL || pstrURL == NULL)
			return FALSE;
		assert(lpComponents->dwHostNameLength == 0 ||
			lpComponents->lpszHostName != NULL);
		assert(lpComponents->dwUrlPathLength == 0 ||
			lpComponents->lpszUrlPath != NULL);
		assert(lpComponents->dwUserNameLength == 0 ||
			lpComponents->lpszUserName != NULL);
		assert(lpComponents->dwPasswordLength == 0 ||
			lpComponents->lpszPassword != NULL);
 
		//ASSERT(AfxIsValidAddress(lpComponents, sizeof(URL_COMPONENTS), TRUE));
 
		LPTSTR pstrCanonicalizedURL;
		TCHAR szCanonicalizedURL[INTERNET_MAX_URL_LENGTH];
		DWORD dwNeededLength = INTERNET_MAX_URL_LENGTH;
		BOOL bRetVal;
		BOOL bMustFree = FALSE;
 
		// Decoding is done in InternetCrackUrl/UrlUnescape 
		// so we don't need the ICU_DECODE flag here.
 
		DWORD dwCanonicalizeFlags = dwFlags &
			(ICU_NO_ENCODE | ICU_NO_META |
			ICU_ENCODE_SPACES_ONLY | ICU_BROWSER_MODE);
 
		DWORD dwCrackFlags = 0;
 
		BOOL bUnescape = FALSE;
 
		if((dwFlags & (ICU_ESCAPE | ICU_DECODE)) && (lpComponents->dwUrlPathLength != 0) )
		{
 
			// We use only the ICU_ESCAPE flag for decoding even if
			// ICU_DECODE is passed.
 
			// Also, if ICU_BROWSER_MODE is passed we do the unescaping
			// manually because InternetCrackUrl doesn't do
			// Browser mode unescaping
 
			if (dwFlags & ICU_BROWSER_MODE)
				bUnescape = TRUE;
			else
				dwCrackFlags |= ICU_ESCAPE;
		}
 
		bRetVal = InternetCanonicalizeUrl(pstrURL, szCanonicalizedURL,
			&dwNeededLength, dwCanonicalizeFlags);
 
		if (!bRetVal)
		{
			if (::GetLastError() != ERROR_INSUFFICIENT_BUFFER)
				return FALSE;
 
			pstrCanonicalizedURL = new TCHAR[dwNeededLength];
			if (pstrCanonicalizedURL == NULL)
				return FALSE;
 
			bMustFree = TRUE;
			bRetVal = InternetCanonicalizeUrl(pstrURL, pstrCanonicalizedURL,
				&dwNeededLength, dwCanonicalizeFlags);
			if (!bRetVal)
			{
				delete [] pstrCanonicalizedURL;
				return FALSE;
			}
		}
		else
			pstrCanonicalizedURL = szCanonicalizedURL;
 
		// now that it's safely canonicalized, crack it
 
		bRetVal = InternetCrackUrl(pstrCanonicalizedURL, 0,
			dwCrackFlags, lpComponents);
 
		if(bUnescape)
		{
			if((UrlUnescape(lpComponents->lpszUrlPath,NULL,NULL,URL_UNESCAPE_INPLACE | URL_DONT_UNESCAPE_EXTRA_INFO)))
			{
				if (bMustFree)
					delete [] pstrCanonicalizedURL;
 
				return FALSE;
			}
 
			lpComponents->dwUrlPathLength = lstrlen(lpComponents->lpszUrlPath);
		}
 
		if (bMustFree)
			delete [] pstrCanonicalizedURL;
 
		// convert to MFC-style service ID
 
		if (!bRetVal)
			dwServiceType = AFX_INET_SERVICE_UNK;
		else
		{
			nPort = lpComponents->nPort;
			switch (lpComponents->nScheme)
			{
			case INTERNET_SCHEME_FTP:
				dwServiceType = AFX_INET_SERVICE_FTP;
				break;
 
			case INTERNET_SCHEME_GOPHER:
				dwServiceType = AFX_INET_SERVICE_GOPHER;
				break;
 
			case INTERNET_SCHEME_HTTP:
				dwServiceType = AFX_INET_SERVICE_HTTP;
				break;
 
			case INTERNET_SCHEME_HTTPS:
				dwServiceType = AFX_INET_SERVICE_HTTPS;
				break;
 
			case INTERNET_SCHEME_FILE:
				dwServiceType = AFX_INET_SERVICE_FILE;
				break;
 
			case INTERNET_SCHEME_NEWS:
				dwServiceType = AFX_INET_SERVICE_NNTP;
				break;
 
			case INTERNET_SCHEME_MAILTO:
				dwServiceType = AFX_INET_SERVICE_MAILTO;
				break;
 
			default:
				dwServiceType = AFX_INET_SERVICE_UNK;
			}
		}
 
		return bRetVal;
	}
 
	BOOL ParseURL(LPCTSTR pstrURL, DWORD& dwServiceType,
		string& strServer, string& strObject, INTERNET_PORT& nPort)
	{
		dwServiceType = AFX_INET_SERVICE_UNK;
 
		assert(pstrURL != NULL);
		if (pstrURL == NULL)
			return FALSE;
 
		URL_COMPONENTS urlComponents;
		memset(&urlComponents, 0, sizeof(URL_COMPONENTS));
		urlComponents.dwStructSize = sizeof(URL_COMPONENTS);
 
		urlComponents.dwHostNameLength = INTERNET_MAX_URL_LENGTH;
		urlComponents.lpszHostName = new char[INTERNET_MAX_URL_LENGTH+1];
		urlComponents.dwUrlPathLength = INTERNET_MAX_URL_LENGTH;
		urlComponents.lpszUrlPath = new char[INTERNET_MAX_URL_LENGTH+1];
 
		BOOL bRetVal = ParseURLWorker(pstrURL, &urlComponents,
			dwServiceType, nPort, ICU_BROWSER_MODE);
 
		strServer = urlComponents.lpszHostName;
		strObject = urlComponents.lpszUrlPath;
		delete urlComponents.lpszHostName;
		delete urlComponents.lpszUrlPath;
		return bRetVal;
	}
 
	BOOL HttpQueryStatusCode(HINTERNET hRequest, DWORD& dwStatusCode)
	{
		CHAR szBuffer[80];
		DWORD dwLen = _countof(szBuffer);
		BOOL bRet;
 
		bRet = HttpQueryInfo(hRequest, HTTP_QUERY_STATUS_CODE,
			szBuffer, &dwLen, NULL);
 
		if (bRet)
			dwStatusCode = (DWORD)atol(szBuffer);
		return bRet;
	}
 
	set<string> dict;
	string cookies;
 
	dict.insert("Max-Age");
	dict.insert("expires");
	dict.insert("domain");
	dict.insert("path");
	dict.insert("secure");
	dict.insert("HttpOnly");
	string HttpGet(LPCTSTR url, const string& queryString)
	{
		string result;
		DWORD dwVersion = GetVersion();
		stringstream agent;
		agent << "Mozilla/4.0 (System " << (int)LOBYTE(LOWORD(dwVersion)) << ".";
		agent << (int)HIBYTE(LOWORD(dwVersion)) << "." << (int)HIWORD(dwVersion) << "; Fyter HTTP Module)";
		stringstream req;
		//req << "Accept: */*/r/n";//Range: bytes=%u-/r/n
		req << "Accept-Language:zh-cn/r/n";
		if( !cookies.empty() )
			req << "Cookie:" + cookies + "/r/n";
		req << "Content-Type:application/x-www-form-urlencoded/r/n/r/n";
 
		string finalURL = url;
		finalURL += queryString;
 
		string host;
		string obj;
		DWORD type;
		INTERNET_PORT port;
 
		if( !ParseURL(finalURL.c_str(), type, host, obj, port) )
			goto close;
 
		HINTERNET hInternet = InternetOpen(agent.str().c_str(),
			INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, NULL);
		HINTERNET hSession = InternetConnect(hInternet, host.c_str(), port, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 0);
		LPSTR szAccept[] = {"text/*" , NULL};
 
		HINTERNET hRequest = HttpOpenRequest(hSession, "GET", obj.c_str(),
			NULL, NULL, (LPCSTR*)szAccept, INTERNET_FLAG_DONT_CACHE|INTERNET_FLAG_RELOAD, 0);
 
		HttpSendRequest(hRequest, req.str().c_str(), -1, NULL, 0);
 
		LPSTR lpszData; // 数据缓冲
		DWORD dwSize; // 缓冲尺寸
		DWORD dwDownloaded; // 下载的长度
 
		DWORD status = 0;
		if(!HttpQueryStatusCode(hRequest, status))
			goto close;
		if( status < 200 || status >= 300)
			goto close;
 
		char value[1000];
		DWORD valueLen = sizeof(value);
		if(HttpQueryInfo(hRequest, HTTP_QUERY_SET_COOKIE, value, &valueLen, 0))
		{
			stringstream ss(value);
			string sub;
			cookies.clear();
			while(getline(ss,sub,';'))
			{
				stringstream ss2(sub);
				string sub2;
				getline(ss2,sub2,'=');
				sub2.erase(0, sub2.find_first_not_of(" /t/n/r"));
				sub2.erase(sub2.find_last_not_of(" /t/n/r")+1);
				
				if(dict.find(sub2) == dict.end())
				{
					cookies = sub + ";";
				}
			}
		}
		
		// 接收数据循环
		while(1)
		{
			if (!InternetQueryDataAvailable(hRequest,&dwSize,0,0) || dwSize == 0 )
			{
				break;
			}
			else
			{ 
				lpszData = new char[dwSize+1];
 
				if(!InternetReadFile(hRequest,(LPVOID)lpszData,dwSize,&dwDownloaded))
				{
					delete[] lpszData;
					break;
				}
				else
				{
					//lpszData[dwDownloaded]='/0';
					result.insert(result.size() , lpszData, dwDownloaded);
 
					delete[] lpszData;
					if (dwDownloaded == 0)
						break;
				}
			}
		}
 
		close:
		InternetCloseHandle(hRequest);
		InternetCloseHandle(hSession);
		InternetCloseHandle(hInternet);
 
		return result;
	}
 
	string HttpPost(LPCTSTR url, const string& postContent)
	{
		string result;
		DWORD dwVersion = GetVersion();
		stringstream agent;
		agent << "Mozilla/4.0 (System " << (int)LOBYTE(LOWORD(dwVersion)) << ".";
		agent << (int)HIBYTE(LOWORD(dwVersion)) << "." << (int)HIWORD(dwVersion) << "; Fyter HTTP Module)";
		stringstream req;
		req << "Accept-Language:zh-cn/r/n";
		if( !cookies.empty() )
			req << "Cookie:" + cookies + "/r/n";
		req << "Content-Type:application/x-www-form-urlencoded/r/n";
		req << "Content-Length: " << postContent.length() << "/r/n/r/n";
 
		string host;
		string obj;
		DWORD type;
		INTERNET_PORT port;
 
		if( !ParseURL(url, type, host, obj, port) )
			goto close;
 
		HINTERNET hInternet = InternetOpen(agent.str().c_str(), INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, NULL);
		HINTERNET hSession = InternetConnect(hInternet, host.c_str(), port, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 0);
		char* szAccept[] = {"text/xml" , NULL};
 
		HINTERNET hRequest = HttpOpenRequest(hSession, "POST", obj.c_str(), NULL, NULL, (LPCSTR*)szAccept, 0, 0);
		HttpSendRequest(hRequest, req.str().c_str(), -1, (LPVOID)postContent.c_str(), postContent.length());
		
		LPSTR lpszData; // 数据缓冲
		DWORD dwSize; // 缓冲尺寸
		DWORD dwDownloaded; // 下载的长度
 
		DWORD status = 0;
		if(!HttpQueryStatusCode(hRequest, status))
			goto close;
		if( status < 200 || status >= 300)
			goto close;
 
		char value[1000];
		DWORD valueLen = sizeof(value);
		if(HttpQueryInfo(hRequest, HTTP_QUERY_SET_COOKIE, value, &valueLen, 0))
		{
			stringstream ss(value);
			string sub;
			cookies.clear();
			while(getline(ss,sub,';'))
			{
				stringstream ss2(sub);
				string sub2;
				getline(ss2,sub2,'=');
				sub2.erase(0, sub2.find_first_not_of(" /t/n/r"));
				sub2.erase(sub2.find_last_not_of(" /t/n/r")+1);
				
				if(dict.find(sub2) == dict.end())
				{
					cookies = sub + ";";
				}
			}
		}
 
		// 接收数据循环
		while(1)
		{
			if (!InternetQueryDataAvailable(hRequest,&dwSize,0,0) || dwSize == 0 )
			{
				break;
			}
			else
			{
				lpszData = new char[dwSize+1];
 
				if(!InternetReadFile(hRequest,(LPVOID)lpszData,dwSize,&dwDownloaded))
				{
					delete[] lpszData;
					break;
				}
				else
				{
					result.insert(result.size() , lpszData, dwDownloaded);
delete[] lpszData; if (dwDownloaded == 0) break; } } } close: InternetCloseHandle(hRequest); InternetCloseHandle(hSession); InternetCloseHandle(hInternet); return result; }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

带有Cookie功能的HTTP访问函数,GET,PUT/POST 的相关文章

  • 应用程序未打开时,GCM 消息未发送?

    最近我在我的应用程序上实现了 GCM 我按照这个网站上的教程代码进行操作 http javapapers com android google cloud messaging gcm for android and push notific
  • Android:从服务中关闭屏幕

    我正在尝试找出如何从服务中关闭屏幕 我已经读过this https stackoverflow com questions 1875669 calling hidden api in android to turn screen off但我
  • 创建服务(SERVICE_ACCEPT_SESSIONCHANGE)

    我正在尝试按照以下链接中记录的示例创建服务 http msdn microsoft com en us library bb540475 v VS 85 aspx http msdn microsoft com en us library
  • Angular 服务测试出了什么问题?

    我有一个调用外部网络服务的服务 angular module myApp services service autoCmpltDataSvc function http var innerMatch function data return
  • 如何绑定到正在运行的android服务?

    我希望这更多的是代码问题 而不是其他问题 我希望有人可以帮助解决这个问题 我还有其他使用 startService 启动服务的代码 并且当调试器点击 DecoderService 的 onCreate 函数时 我可以验证该服务是否已启动 但
  • PhoneStateListener onSignalStrengthsChanged 停止在 Service 中调用

    我正在编写包含两个元素的简单应用程序 服务和活动 活动仅用于启动和停止服务 服务用途PhoneStateListener获取有关当前 CellID LAC 和 RSSI 信号强度 的信息并将其记录到文件中 当手机未休眠时一切正常 我注意到
  • 如何在 Android 中与正在运行的线程进行服务通信

    我的目标是推出一项能够满足所有应用程序网络需求的服务 我想也许打开2个套接字用于数据传输 我希望异步处理数据 所以我想我应该在两个单独的线程中运行它们 每个线程针对每个套接字 这样数据就可以在两个不同的 链接 异步中进行流式传输 所以 我希
  • 限制 Factforge sparql 端点使用的图表

    Using http www sparql org sparql html http www sparql org sparql html运行此查询 prefix oxprop
  • Android后台服务判断前台应用程序

    我正在开发一个应用程序 可以监控全天的手机使用情况 为此 我有一个后台服务 该服务在设备启动时启动 并不断轮询以找出当前的前台应用程序是什么 当我单击一个应用程序然后退出并单击另一个应用程序时 以下代码将起作用 现在假设我打开浏览器并转到另
  • ::FindWindow 从服务应用程序失败

    从服务应用程序调用时 Windows API FindWindow 函数失败 GetLastError 也返回 0 成功 这是一些特权 访问权问题吗 你认为这是设计问题吗 我应该使用另一种IPC方法吗 leppie 是的 Windows 服
  • 在重新激活 WiFi/移动网络之前,服务中的 Android 位置侦听器无法工作

    我的位置侦听器工作正常 收集数据没有任何问题 但有时它不收集任何数据 我此时必须关闭并重新启动我的位置提供程序 重新启动可以解决问题 但是 这可能不是用户期望做的最好的事情 当我使用 GPS 作为提供商时 没有问题 位置侦听器在服务中工作
  • 如何在我的类型类中访问我的服务(DependencyInjection)?

    我创建了一个服务 DependencyInjection 并在控制器上将其用作 this gt get service name gt someMethod 我想知道如何在我的表单类上使用它 这是我的课程示例形式 namespace Com
  • OSGi 应用程序设计 - 我是否滥用服务框架? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 在我们正在开发的应用程序中 我有一个供数据提供程序组件实现的通用接口 并且我将这些提供程序作为服务连接起来 我的一位同事建议 最好只创建一项可以
  • Spring框架中的DAO和Service层到底是什么?

    Spring框架中的DAO和Service层到底是什么 我正在寻找理论答案 就 Spring 而言 没有区别 按照惯例 您可以使用以下方式标记 DAO 类 Repository和服务 Service 前者还进行一些持久层异常转换 既然您在理
  • 共享首选项更新值未反映在服务中

    我的应用程序在应用程序启动时调用服务 在应用程序中 我正在更新给定键值对的值 SharedPreferences Editor editor getSharedPreferences getString R string shared pr
  • Windows 服务和 Windows 进程有什么区别?

    是什么不同之处窗户之间service和一个窗户process 服务是真正的 Windows 进程 没有区别 服务的唯一特殊之处在于它由操作系统启动并在单独的会话中运行 一种独立的方式 可防止其干扰桌面会话 传统上命名为daemon http
  • 启动时启动服务但不进行任何活动

    我想创建一个仅包含服务 无活动 的应用程序 该服务必须在启动时启动 我的问题是 如果没有活动 启动接收器似乎不会调用 我用下面的例子进行了测试 我有不同的文件 MyReceiver java package com test teststa
  • 无法启动 Windows 服务,错误 1064

    我编写了一个在 Win10 上运行的 Windows 服务 它运行得非常好 直到我决定对其进行一些更改 我重写了一些逻辑 在调试和发布配置中进行了测试 一切都很好 然后 我使用卸载了当前版本的服务installutil exe u serv
  • 发送变量后的 wsdl 服务响应,php

    我是 SOAP WSDL 函数的新手 我有一位客户从一家从事汽车测试的公司获得了 wsdl 文件 我的客户是他们的分包商 他们告诉我们上传有关车牌 类别等信息 一旦详细信息发送完毕 服务器就会做出成功或失败的响应 请您协助 浏览不同的信息
  • Symfony2 - 将 Swiftmailer 添加为服务

    我想将我的电子邮件代码从我的控制器移至服务中 到目前为止我已完成以下操作 在 services yml 中创建条目 在 acme demobundle services EmailManager php 中创建了一个 EmailManage

随机推荐

  • html 学习 常用的html标签及使用

    html是什么 超文本标记语言 Hypertext Markup Language HTML 是一种用于创建网页的标记语言 本质上是浏览器可识别的规则 我们按照规则写网页 浏览器根据规则渲染我们的网页 对于不同的浏览器 对同一个标签可能会有
  • nginx下载安装启动(mac)

    为了方便下载管理 建议下载brew工具 bin zsh c curl fsSL https gitee com cunkai HomebrewCN raw master Homebrew sh 使用brew安装nginx brew inst
  • 利用stm32cubemx生成单极性倍频spwm调制代码步骤

    利用stm32实现单极性倍频SPWM调制 电赛必备 哔哩哔哩 利用stm32cubemx生成单极性倍频spwm调制 首先打开cubemx选择mcu型号 配置时钟等 很多教程讲得很好 我这就跳过这些 接下来来到定时器的配置 对于全桥电路 需要
  • 代码管理工具github+git+tortoisegit下载

    GitHub是世界上最大的代码托管平台 是程序员的必备神器 Git 是一个开源的分布式版本控制系统 用于敏捷高效地处理任何或小或大的项目 tortoisegit是一款开源的git的版本控制系统 也叫海龟git TortoiseGit的安装和
  • Session 简介及绑定

    session是什么 其实session是一个存在服务器上的类似于一个散列表格的文件 里面存有我们需要的信息 在我们需要用的时候可以从里面取出来 说起session的作用 简单的举个例子 我们在登录某些网站的时候 输入了用户名密码 登录以后
  • GTest测试框架使用

    Gtest框架简介 Gtest是Google Test的简称 是Google开发的C 单元测试框架 适用于多个平台 Liunx Mac OS X Windows Cygwin Windows CE and Symbian PlatformI
  • OpenWrt-uci脚本命令

    转自 http developer t firefly com thread 1035 1 1 html 目录 1 UCI命令 2 UCI的文件和流程 3 UCI 的文件语法 4 UCI 命令读写配置 5 综合实例 1 UCI命令 一个众所
  • 国内知名公共DNS服务器 IP

    国内知名公共 DNS 服务器 IP 腾讯 DNS 119 29 29 29 182 254 116 116 阿里 DNS 223 5 5 5 223 6 6 6 百度 DNS 180 76 76 76 114DNS 114 114 114
  • osg学习(六十八)序列化插件加载过程

    加载D OSG OAGEARTH x86 bin osgPlugins 3 6 3 osgdb serializers osgd dll
  • 微信小程序 公众号 订阅消息 模板 正则 参数校验

    自己配置订阅消息模板 如果参数格式不正确 会导致订阅消息发不出去 所以在创建模板的时候需要校验参数格式 订阅通知参数值内容限制说明 微信官方文档 创建模板 代码
  • qt 信号发送太快,槽太慢的解决办法

    手机码字太慢 自己看 ifndef THREADTEST H define THREADTEST H include include include include class ThreadTest public QObject Q OBJ
  • 职业规划-IT方向(超详细,超具体)

    前言 今天是周五 本来想好好休息 前天写了一篇博文 说出我的故事 献给正在迷茫的你 不少读者留言不知该如何做职业规划 于是继续拖着忙碌了一周疲倦的身体 坐在电脑前 吹着电扇 提笔写下这篇 职业规划 IT方向 如果你是应届生 或者准备转行 I
  • Django项目想要在 Python Console里面进行操作 报错找不到对应模块

    Django项目想要在 Python Console里面进行操作 报错找不到对应模块 问题描述 ModuleNotFoundError No module named django 问题原因 在进行对 Python console操作 进行
  • 6.1-深度学习简介

    文章目录 一 深度学习的三个步骤 1 1 全连接前馈网络 Fully Connect Feedforward Network 1 2 矩阵运算 Matrix Operation 1 3 手写数字辨识 二 确定评价函数 goodness of
  • 静电电容

    1 用电容进行ESD的防护只能用数pF到数百pF的小电容 这里关注的不是容量而是串联等效电感参数 静电放电极快 对应极高的频率 耐压的问题不用考虑 因为静电源内阻极高 能量很小 放电时电压跌落极快 2 理论上讲大电容并不会因为时间常数的增加
  • ❤echarts折线图完整使用及详细配置参数

    echarts折线图完整使用及详细配置参数 进入echarts官网 查看案例 下面说说一些echarts图的调节 一 配置echarts具体参数 01 基础版本的折线图 option xAxis type category data Mon
  • 将gif图转成静态图片显示canvas

    需求描述 仅一张gif动图 进入页面 呈现静态图片显示 点击 gif图显示 代码实现
  • uniapp全局分享以及指定页面分享禁用的设置

    1 创建share js文件 module exports onLoad 设置默认的转发参数 share title 默认为小程序名称 path 默认为当前页面路径 imageUrl 默认为当前页面的截图 白名单 const urlList
  • Apollo学习笔记

    Apollo学习笔记 Apollo课程 智能驾驶入门课程 无人驾驶概览 1 软件层分为三层 实时操作系统 RTOS 确保在给定时间内完成特定任务 实时时确保系统稳定性 驾驶安全性的重要要求 通过在Ubuntu Linux操作系统加入Apol
  • 带有Cookie功能的HTTP访问函数,GET,PUT/POST

    define AFX INET SERVICE FTP INTERNET SERVICE FTP define AFX INET SERVICE HTTP INTERNET SERVICE HTTP define AFX INET SERV