当前位置: 首页 > news >正文

网站营销主管岗位职责评论给网站带来的益处

网站营销主管岗位职责,评论给网站带来的益处,九江城市投资建设有限公司网站,开发公司交房前财务交付风险LibCurl是一个开源的免费的多协议数据传输开源库#xff0c;该框架具备跨平台性#xff0c;开源免费#xff0c;并提供了包括HTTP、FTP、SMTP、POP3等协议的功能#xff0c;使用libcurl可以方便地进行网络数据传输操作#xff0c;如发送HTTP请求、下载文件、发送电子邮件等…LibCurl是一个开源的免费的多协议数据传输开源库该框架具备跨平台性开源免费并提供了包括HTTP、FTP、SMTP、POP3等协议的功能使用libcurl可以方便地进行网络数据传输操作如发送HTTP请求、下载文件、发送电子邮件等。它被广泛应用于各种网络应用开发中特别是涉及到数据传输的场景。 下载地址https://curl.haxx.se/download.html 首先读者需要自行下载该库如下笔者选择下载curl-8.0.1.zip这个源代码版本读者可找到如下页面并点击对应版本完成下载当下载好以后读者可自行将其解压缩到任意目录下。 当读者解压缩后可打开VS2013 开发人员命令提示并切换带该目录中的curl-8.0.1\winbuild目录通过执行如下两条命令即可分别实现编译静态库或动态库我们以静态库编译为主执行如下命令读者可自行等待一段时间。 动态库: nmake /f Makefile.vc modedll VC13 MACHINEx86 DEBUGno静态库: nmake / f Makefile.vc mode static VC 13 ENABLE_IDN no MACHINE x86 DEBUG no 这个库在编译通过后会自动生成文件到builds\libcurl-vc13-x86-release-static-ipv6-sspi-schannel目录内读者可自行打开该目录即可看到该目录内的头文件以及库目录文件如下图所示 读者可自行配置这个静态库通常只需要配置include和lib文件即可该库的使用很简单首先我们需要调用curl_easy_init()函数对CURL对象进行初始化接着通过调用curl_easy_setopt()并传入一个访问URL链接当访问成功后则可调用curl_easy_perform()函数得到访问结果这就是该库基本使用方法如下代码。 #define CURL_STATICLIB #define BUILDING_LIBCURL #include iostream #include curl/curl.h#pragma comment (lib,libcurl_a.lib) #pragma comment (lib,wldap32.lib) #pragma comment (lib,ws2_32.lib) #pragma comment (lib,Crypt32.lib)using namespace std;int main(int argc, char *argv[]) {CURL *curl;CURLcode res;curl curl_easy_init();if (curl){curl_easy_setopt(curl, CURLOPT_URL, https://www.lyshark.com);res curl_easy_perform(curl);curl_easy_cleanup(curl);}std::cout 返回状态: res std::endl;system(pause);return 0; }运行上述代码读者可看到网站www.lyshark.com的源代码如下图所示 上述代码中的curl_easy_setopt()函数第二个参数可以使用多种类型的变量定义我们可以通过传入不同的常量来定义请求头中的参数例如当我们需要修改协议头时可以使用CURLOPT_HTTPHEADER常量并在其后第三个参数中传入该常量所对应的结构即可这个结构体定义有许多类型具体如下下表所示 常量名称描述CURLINFO_EFFECTIVE_URL最后一个有效的URL地址CURLINFO_HTTP_CODE最后一个收到的HTTP代码CURLINFO_FILETIME远程获取文档的时间如果无法获取则返回值为-1CURLINFO_TOTAL_TIME最后一次传输所消耗的时间CURLINFO_NAMELOOKUP_TIME名称解析所消耗的时间CURLINFO_CONNECT_TIME建立连接所消耗的时间CURLINFO_PRETRANSFER_TIME从建立连接到准备传输所使用的时间CURLINFO_STARTTRANSFER_TIME从建立连接到传输开始所使用的时间CURLINFO_REDIRECT_TIME在事务传输开始前重定向所使用的时间CURLINFO_SIZE_UPLOAD以字节为单位返回上传数据量的总值CURLINFO_SIZE_DOWNLOAD以字节为单位返回下载数据量的总值CURLINFO_SPEED_DOWNLOAD平均下载速度CURLINFO_SPEED_UPLOAD平均上传速度CURLINFO_HEADER_SIZEheader部分的大小CURLINFO_HEADER_OUT发送请求的字符串CURLINFO_REQUEST_SIZE在HTTP请求中有问题的请求的大小CURLINFO_SSL_VERIFYRESULT通过设置CURLOPT_SSL_VERIFYPEER返回的SSL证书验证请求的结果CURLINFO_CONTENT_LENGTH_DOWNLOAD从Content-Length: field中读取的下载内容长度CURLINFO_CONTENT_LENGTH_UPLOAD上传内容大小的说明CURLINFO_CONTENT_TYPE下载内容的Content-Type:值NULL表示服务器没有发送有效的Content-Type:header 如下案例是一个简单的GET请求封装通过调用GetStatus()函数实现对特定页面发起请求的功能其中curl_slist_append()用于增加新的请求头数据在调用curl_easy_setopt()函数时分别传入了CURLOPT_HTTPHEADER设置请求头CURLOPT_WRITEFUNCTION设置回调CURLINFO_PRIMARY_IP获取目标IP地址CURLINFO_RESPONSE_CODE获取目标返回代码此处的write_data()函数直接返回0则表示屏蔽所有的页面输出内容。 #define CURL_STATICLIB #define BUILDING_LIBCURL #include iostream #include curl/curl.h#pragma comment (lib,libcurl_a.lib) #pragma comment (lib,wldap32.lib) #pragma comment (lib,ws2_32.lib) #pragma comment (lib,Crypt32.lib)using namespace std;// 设置CURLOPT_WRITEFUNCTION回调函数,返回为空屏蔽输出 static size_t write_data(char *d, size_t n, size_t l, void *p) {return 0; }// 获取网站返回值 void GetStatus(char *UrlPage) {CURLcode return_code;// 初始化模块return_code curl_global_init(CURL_GLOBAL_WIN32);if (CURLE_OK ! return_code){return;}// 初始化填充请求头struct curl_slist *headers NULL;headers curl_slist_append(headers, User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:76.0));headers curl_slist_append(headers, Referer: https://www.lyshark.com);// 初始化请求库CURL *easy_handle curl_easy_init();if (NULL ! easy_handle){// CURLOPT_HTTPHEADER 自定义设置请求头curl_easy_setopt(easy_handle, CURLOPT_HTTPHEADER, headers);// CURLOPT_URL 自定义请求的网站curl_easy_setopt(easy_handle, CURLOPT_URL, UrlPage);// CURLOPT_WRITEFUNCTION 设置回调函数,屏蔽输出curl_easy_setopt(easy_handle, CURLOPT_WRITEFUNCTION, write_data);// 执行CURL访问网站return_code curl_easy_perform(easy_handle);char *ipAddress { 0 };// CURLINFO_PRIMARY_IP 获取目标IP信息return_code curl_easy_getinfo(easy_handle, CURLINFO_PRIMARY_IP, ipAddress);if ((CURLE_OK return_code) ipAddress){std::cout 目标IP: ipAddress std::endl;}long retcode 0;// CURLINFO_RESPONSE_CODE 获取目标返回状态return_code curl_easy_getinfo(easy_handle, CURLINFO_RESPONSE_CODE, retcode);if ((CURLE_OK return_code) retcode){std::cout 返回状态码: retcode std::endl;}}curl_easy_cleanup(easy_handle);curl_global_cleanup(); }int main(int argc, char *argv[]) {GetStatus(https://www.lyshark.com);system(pause);return 0; }运行上述代码则可以获取到www.lyshark.com目标主机的IP地址以及页面返回状态如下图所示 当然该库同样支持POST请求方式在使用POST请求时我们可以通过CURLOPT_COOKIEFILE参数指定Cookie参数通过CURLOPT_POSTFIELDS指定POST的数据集而如果需要使用代理模式则可以通过CURLOPT_PROXY方式来指定代理地址 #define CURL_STATICLIB #define BUILDING_LIBCURL #include iostream #include curl/curl.h#pragma comment (lib,libcurl_a.lib) #pragma comment (lib,wldap32.lib) #pragma comment (lib,ws2_32.lib) #pragma comment (lib,Crypt32.lib)using namespace std;bool SendPost(char *Url, char *Cookie, char *PostVal) {CURL *curl;CURLcode res;// 初始化库curl curl_easy_init();if (curl){// 设置请求头struct curl_slist *headers NULL;headers curl_slist_append(headers, User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:76.0));headers curl_slist_append(headers, Referer: https://www.lyshark.com);// 设置请求头curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);// 指定URLcurl_easy_setopt(curl, CURLOPT_URL, Url);// 指定cookie参数curl_easy_setopt(curl, CURLOPT_COOKIEFILE, Cookie);// 指定post内容curl_easy_setopt(curl, CURLOPT_POSTFIELDS, PostVal);// 是否代理// curl_easy_setopt(curl, CURLOPT_PROXY, 10.99.60.201:8080);res curl_easy_perform(curl);curl_easy_cleanup(curl);}return true; }int main(int argc, char *argv[]) {// 传入网址 cookie 以及post参数SendPost(https://www.lyshark.com/post.php, 1e12sde342r2, logintypeuiduxieyanpswxxx86);system(pause);return 0; }该函数的调用需要有一个POST结构才可测试此处由于我并没有指定接口所有返回了页面错误信息如下图所示 接着继续实现下载页面到本地的功能该功能实现的原理是利用write_data回调函数当页面数据被读入到内存时回调函数会被触发在该回调函数的内部通过调用fwrite函数将ptr指针中的数据保存本地实现这段代码如下所示 #define CURL_STATICLIB #define BUILDING_LIBCURL #include iostream #include curl/curl.h#pragma comment (lib,libcurl_a.lib) #pragma comment (lib,wldap32.lib) #pragma comment (lib,ws2_32.lib) #pragma comment (lib,Crypt32.lib)using namespace std;FILE *fp;size_t write_data(void *ptr, size_t size, size_t nmemb, void *stream) {int written fwrite(ptr, size, nmemb, (FILE *)fp);return written; }BOOL GetUrl(char *URL, char *FileName) {CURL *curl;curl_global_init(CURL_GLOBAL_ALL);curl curl_easy_init();curl_easy_setopt(curl, CURLOPT_URL, URL);// 在屏幕打印请求连接过程和返回http数据curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);// 查找次数,防止查找太深curl_easy_setopt(curl, CURLOPT_MAXREDIRS, 1);// 设置连接超时curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 3);// 接收数据时超时设置curl_easy_setopt(curl, CURLOPT_TIMEOUT, 3);if ((fp fopen(FileName, w)) NULL){curl_easy_cleanup(curl);return FALSE;}// CURLOPT_WRITEFUNCTION 将后继的动作交给write_data函数处理curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);curl_easy_perform(curl);curl_easy_cleanup(curl);return TRUE; }int main(int argc, char *argv[]) {// 下载网页到本地GetUrl(https://www.lyshark.com, ./lyshark.html);system(pause);return 0; }当读者运行上述程序后即可将www.lyshark.com网站页面源码下载到本地当前目录下lyshark.html输出效果如下图所示 为了能解析参数我们还是需要将页面源代码读入到内存中要实现这个需求并不难首先我们定义一个std::string容器然后当有新数据产生时触发WriteCallback在该函数内我们直接将数据拷贝到一个内存指针中也就是存储到read_buffer内并将该缓冲区返回给调用者即可如下则是完整源代码。 #define CURL_STATICLIB #define BUILDING_LIBCURL #include iostream #include string #include curl/curl.h#pragma comment (lib,libcurl_a.lib) #pragma comment (lib,wldap32.lib) #pragma comment (lib,ws2_32.lib) #pragma comment (lib,Crypt32.lib)using namespace std;// 存储回调函数 size_t WriteCallback(char *contents, size_t size, size_t nmemb, void *userp) {((std::string*)userp)-append((char*)contents, size * nmemb);return size * nmemb; }// 获取数据并放入string中. std::string GetUrlPageOfString(std::string url) {std::string read_buffer;CURL *curl;curl_global_init(CURL_GLOBAL_ALL);curl curl_easy_init();if (curl){// 忽略证书检查curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L);// 重定向curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1);// URL路径curl_easy_setopt(curl, CURLOPT_URL, url);// 查找次数,防止查找太深curl_easy_setopt(curl, CURLOPT_MAXREDIRS, 1);// 连接超时curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 3);// 接收数据时超时设置curl_easy_setopt(curl, CURLOPT_TIMEOUT, 3);// 写入回调函数curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);curl_easy_setopt(curl, CURLOPT_WRITEDATA, read_buffer);curl_easy_perform(curl);curl_easy_cleanup(curl);return read_buffer;}return None; }int main(int argc, char *argv[]) {std::string urls GetUrlPageOfString(https://www.lyshark.com);std::cout 接收长度: urls.length() bytes std::endl;system(pause);return 0; }如下图所示则是运行后输出内存数据长度当然我们也可以直接输出urls中的数据也就是网页的源代码 本文作者 王瑞 本文链接 https://www.lyshark.com/post/6aa9753b.html 版权声明 本博客所有文章除特别声明外均采用 BY-NC-SA 许可协议。转载请注明出处
http://www.hkea.cn/news/14263194/

相关文章:

  • 全球网站流量排名100上海技术公司做网站
  • 网站建设对企业发展的意义不是搜索网站的是
  • 哪些网站可以做gif05网全部答案数学
  • 外贸网站 wordpresswordpress注册中文插件
  • 做网站开发的营业执照新建网站seo优化怎么做
  • 做网站太麻烦了福田网站建设多少钱
  • 上海建站seo企业类网页设计
  • 庆阳网站设计制作南阳专业网站建设
  • 网站备案号在哪wordpress4.6 手册
  • 西湖区外贸网站建设小目标网站建设
  • 南宁月嫂网站建设郴州房产网
  • 什么是门户网站广告如何做好网站建设的关键重点
  • 做一个商城网站域名买完了网站建设
  • access 网站后台宝贝我想跟你做网站
  • 从零开始自己做外贸网站和海外网络营销wordpress明星
  • 自己怎么建个免费网站折一把古风扇子
  • 社交网站开发教程小程序建站工具
  • 群晖ds218 做网站用php做注册网站的代码
  • 网站建设太金手指六六三十WordPress资讯网站
  • 公司网站出现空白页长沙 建站优化
  • 汕头免费建站哪里有有没有网站可以学做床上用品
  • 瑞安做网站房子装修风格大全2021新款
  • 哪个网站做国内销海外的wordpress 3.9 中文
  • 购物网站建设比较好的徐州云龙区建设局网站
  • 图书馆网站开发总结网站开发课程心得
  • 茶叶有什么网站可以做推广wordpress局域网建站
  • 做外贸需要关注的网站有什么好处网站建设使用多语言
  • 展览展示设计网站喀什网站制作
  • 互助网站建设公司门户网站产品设计方案
  • 网站开发人员保密wordpress可视化找不着