北屋教程网

专注编程知识分享,从入门到精通的编程学习平台

PyTorch工业级开发完全指南:8大核心技能从定制模块到生产部署

本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频内容和资料,尽在

Linux下C++访问web—使用libcurl库调用http接口发送解析json数据


一、背景

这两天由于一些原因研究了研究如何在客户端C++代码中调用web服务端接口,需要访问url,并传入json数据,拿到返回值,并解析。

 现在的情形是远程服务端的接口参数和返回类型都是json的字符串。所以我们主要做的就是:连接远程url、找到接口,将基本类型的数据封装成json数据传入接口,然后获取返回值,并解析返回的json数据。

 这里需要用到的库就有url库、json库,大致了解了,接下来就要下载包进行配置了。

Workerman的使用(workmanplus)

Workerman是什么?

Workerman是一款纯PHP开发的开源高性能的PHP socket 服务框架。

Workerman不是重复造轮子,它不是一个MVC框架,而是一个更底层更通用的socket服务框架,你可以用它开发tcp代理、梯子代理、做游戏服务器、邮件服务器、ftp服务器、甚至开发一个php版本的redis、php版本的数据库、php版本的nginx、php版本的php-fpm等等。Workerman可以说是PHP领域的一次创新,让开发者彻底摆脱了PHP只能做WEB的束缚。实际上Workerman类似一个PHP版本的nginx,核心也是多进程+Epoll+非阻塞IO。Workerman每个进程能维持上万并发连接。由于本身常住内存,不依赖Apache、nginx、php-fpm这些容器,拥有超高的性能。同时支持TCP、UDP、UNIXSOCKET,支持长连接,支持Websocket、HTTP、WSS、HTTPS等通讯协议以及各种自定义协议。拥有定时器、异步socket客户端、异步Mysql、异步Redis、异步Http、异步消息队列等众多高性能组件。

PHP实现微信支付及退款流程实例(php调用微信支付接口)

微信小程序支付的主要逻辑集中在后端,前端只需携带支付所需的数据请求后端接口然后根据返回结果做相应成功失败处理即可。本篇文章后端使用的是php,侧重于整个支付的流程和一些细节方面的东西。所以使用其他后端语言的朋友有需要也是可以看一下的。很多时候开发的需求和相应问题的解决真的要跳出语言语法层面,去从系统和流程的角度考虑。


一、微信支付

C++如何查询实时贵金属行情(贵金属行情实时报价表)

在本文中,我们将通过C++接入贵金属实时行情数据接口,帮助你获取黄金和白银等贵金属的K线数据。我们会使用 libcurl 库进行HTTP请求,并处理API返回的数据。

一、API请求地址

贵金属的实时行情通过如下API获取:

使用curl进行http高并发访问(php curl 大量并发获得结果)

本文主要介绍curl异步接口的使用方式,以及获取高性能的一些思路和实践。同时假设读者已经熟悉并且使用过同步接口。

1.curl接口基本介绍

curl一共有三种接口:

  • Easy Interface
  • Multi Interface
  • Share Interface

Thinkphp5.0极速搭建restful风格接口层

下面是基于ThinkPHP V5.0 RC4框架,以restful风格完成的新闻查询(get)、新闻增加(post)、新闻修改(put)、新闻删除(delete)等server接口层。

1、下载ThinkPHP V5.0 RC4版本;

2、配置虚拟域名(非必须,只是为了方便);

Apache\conf\extra\httpd-vhosts.conf

FCKeditor上传漏洞的总结分析(fckeditor上传漏洞的总结分析是什么)

0x01 FCKeditor简介

FCKeditor是一个专门使用在网页上属于开放源代码的所见即所得文字编辑器。它志于轻量化,不需要太复杂的安装步骤即可使用。它可和PHP、 JavaScript、ASP、ASP.NET、ColdFusion、Java、以及ABAP等不同的编程语言相结合。“FCKeditor”名称中的 “FCK” 是这个编辑器的作者的名字Frederico Caldeira Knabben的缩写。FCKeditor 相容于绝大部分的网页浏览器,像是 : Internet Explorer 5.5+ (Windows)、MozillaFirefox 1.0+、Mozilla 1.3+ 和 Netscape 7+。在未来的版本也将会加入对 Opera的支援。

ssrf漏洞复现,黑客利用漏洞打穿内网,危险了服务器

SSRF(Server-Side Request Forgery:服务器端请求伪造) 是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。一般情况下,SSRF是要目标网站的内部系统。(因为他是从内部系统访问的,所有可以通过它攻击外网无法访问的内部系统,也就是把目标网站当中间人)

SSRF 形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能,且没有对目标地址做过滤与限制。比如从指定URL地址获取网页文本内容,加载指定地址的图片,文档,等等。

php从远程URL获取(mp4 mp3)音视频的流媒体数据

 /**
     * 从远程URL中获取媒体(如 mp4 mp3)的内容
     * @param mixed $file_url
     * @param mixed $media_type
     * @param mixed $curl_time_out
     * @throws Exception
     * @return mixed
     */
    public static function getRemoteMediaContent($file_url = '', $media_type = "Content-Type: video/mp4", $curl_time_out = 600000)
    {

        if (empty($file_url)) {
            throw new Exception('请传入远程url地址', Response::PARAM_ERROR);
        }

        $parse_bool = parse_url($file_url);
        if ($parse_bool === false) {
            throw new Exception('请传入有效的远程url地址', Response::PARAM_ERROR);
        }

        ini_set('max_execution_time', 0);

        $useragent = "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.96 Safari/537.36";

        //开一个ch  用来获取资源HTTP头信息(主要获取视频长度)
        $ch = curl_init();

        // TRUE 会输出所有的信息,写入到STDERR,或在CURLOPT_STDERR中指定的文件。
        curl_setopt($ch, CURLOPT_VERBOSE, 1);

        //允许 cURL 函数执行的最长秒数
        curl_setopt($ch, CURLOPT_TIMEOUT, $curl_time_out);

        //需要获取的 URL 地址,也可以在curl_init() 初始化会话的时候
        curl_setopt($ch, CURLOPT_URL, $file_url);

        //TRUE 时将会根据服务器返回 HTTP 头中的 "Location: " 重定向。
        //(注意:这是递归的,"Location: " 发送几次就重定向几次,除非设置了 CURLOPT_MAXREDIRS,限制最大重定向次数。)。
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);

        // 启用时会将头文件的信息作为数据流输出(注意这里第一步只需要获取资源HTTP头信息 主要是为了得到内容的长度)
        curl_setopt($ch, CURLOPT_HEADER, true);

        // TRUE 强制获取一个新的连接,而不是缓存中的连接
        curl_setopt($ch, CURLOPT_FRESH_CONNECT, true);

        // FALSE 禁止 cURL 验证对等证书(peer'scertificate)。要验证的交换证书可以在 CURLOPT_CAINFO 选项中设置,或在 CURLOPT_CAPATH中设置证书目录
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);

        //向服务器发送,包含了访问者系统引擎版本、浏览器信息的字段信息。
        //一般服务器识别出是爬虫请求,会拒绝访问。所以此时设置User-Agent,可以将爬虫伪装成用户通过浏览器访问。
        curl_setopt($ch, CURLOPT_USERAGENT, $useragent);

        // TRUE 时将不输出 BODY 部分。同时 Mehtod 变成了 HEAD。修改为 FALSE 时不会变成 GET
        curl_setopt($ch, CURLOPT_NOBODY, true);

        //TRUE 将curl_exec()获取的信息以字符串返回,而不是直接输出
        //这里我们不需要关心
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

        //执行 cURL 会话  这里我们只关心头信息  所以不需要获取返回的内容
        curl_exec($ch);

        //获取一个cURL连接资源句柄的信息  这里主要用来读取长度
        //-- CURLINFO_CONTENT_LENGTH_DOWNLOAD   从Content-Length: field中读取的下载内容长度
        $filesize = $length = curl_getinfo($ch, CURLINFO_CONTENT_LENGTH_DOWNLOAD);

        //发送请求的媒体头类型
        header($media_type);

        //------ 获取资源长度告一段落  以下用于获取媒体视频的二进制内容------

        //总共接收的数据大小
        header("Content-length: " . $filesize);

        //接收的数据类型是 字节类型 即二进制
        header('Accept-Ranges: bytes');

        $partialContent = false;
        $offset = 0; //读取数据的初始位置

        if (isset($_SERVER['HTTP_RANGE'])) {

            $partialContent = true;

            //获得初始位置和数据长度
            preg_match('/bytes=(\d+)-(\d+)?/', $_SERVER['HTTP_RANGE'], $matches);
            $offset = intval($matches[1]);
            $length = $filesize - $offset - 1;

            /***
            断点续传: 就是从文件上次中断的地方开始重新下载或上传,当下载或上传文件的时候,如果没有实现断点续传功能,那么每次出现异常或者用户主动的暂停,都会去重头下载,
            这样很浪费时间。所以断点续传的功能就应运而生了。要实现断点续传的功能,需要客户端记录下当前的下载或上传进度,
            并在需要续传的时候通知服务端本次需要下载或上传的内容片段。
            HTTP的请求上定义了断点续传相关的HTTP头Range字段和Content-Range字段。
            比如说客户端在Header中设置Range=bytes22223333- 表示文件从22223333字节开始传,前面的字节不用传了。
            服务器收到请求,返回206 Partial Content。 Content-Length=44445555,Content-Range=bytes22223333-44445554/44445555

             */
            //Chrome在对于MP3文件的访问,返回的都是206 Partial Content
            header('HTTP/1.1 206 Partial Content');

            //每次接收数据的的范围
            header('Content-Range: bytes ' . $offset . '-' . ($offset + $length) . '/' . $filesize);
        }

        //重新开一个ch  用来获取内容
        $ch = curl_init();

        //如果支持分段发送数据
        if ($partialContent && isset($_SERVER['HTTP_RANGE'])) {

            //获取上次的范围
            preg_match('/bytes=(\d+)-(\d+)?/', $_SERVER['HTTP_RANGE'], $matches);

            $offset = intval($matches[1]); //开始位置
            $length = $filesize - $offset - 1; //获取长度

            //发送带有Range的请求头
            $headers = ['Range: bytes=' . $offset . '-' . ($offset + $length) . ''];
            curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
        }

        curl_setopt($ch, CURLOPT_VERBOSE, 1);

        curl_setopt($ch, CURLOPT_TIMEOUT, $curl_time_out);

        curl_setopt($ch, CURLOPT_URL, $file_url);

        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);

        // 启用时会将头文件的信息作为数据流输出(这里只需要获取内容 所以设置为false)
        curl_setopt($ch, CURLOPT_HEADER, false);

        curl_setopt($ch, CURLOPT_FRESH_CONNECT, true);

        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);

        curl_setopt($ch, CURLOPT_USERAGENT, $useragent);

        // TRUE 时将不输出 BODY 部分。同时 Mehtod 变成了 HEAD。修改为 FALSE 时不会变成 GET  [ 这里我们不需要输出头信息]
        curl_setopt($ch, CURLOPT_NOBODY, false);

        // TRUE 将curl_exec()获取的信息以字符串返回,而不是直接输出
        //这里我们需要直接输出二进制数据
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, false);

        //执行 cURL 会话
        curl_exec($ch);
    }
<< 1 2 > >>
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言