FBrowserCEF3Lib浏览器开发技术交流网址

 找回密码
 立即注册
查看: 4237|回复: 1

FBrowserCEF3Lib开发手册之创建URL请求的方法以及注意事项

[复制链接]

签到天数: 467 天

[LV.9]以坛为家II

79

主题

416

回帖

79万

积分

管理员

皇冠皇冠皇冠皇冠太阳太阳

积分
798316

优秀会员永久VIP会员活跃会员热心会员推广达人宣传达人灌水之王突出贡献优秀版主荣誉管理论坛元老荣耀会员精华大师大富翁

发表于 2024-11-29 14:58:56 | 显示全部楼层 |阅读模式
文档教程
教程类型: 通用教程
备注说明: -

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
一、易全局创建
       全局创建可以不创建浏览器,如果要采用独立的环境就和创建动态浏览器方式一样创建一个请求环境参数即可,可参考动态浏览器创建的例子;
注意:
1.创建请求必须在初始化完成后,也就是执行框架初始化并回调初始化完成事件后才可创建URL请求,否则可能会失效甚至崩溃;

2.获取数据同样采用的是异步操作,在“URL请求_获取到数据”事件中,这里如果你请求的数据过大或包含多个会反复多次调用该事件方法,可以用同步类来辅助获取拼接数据,然后在“URL请求_即将完成”事件中使用拼接的最终数据,使用方法搜索论坛莫生的参考URL创建代码
  • 请求示例代码如下:
.版本 2

.子程序 _全局创建_被选择
.局部变量 请求, 类_FBrowser_请求
.局部变量 头数据, FBrowser_双文本, , "1"

请求.创建 ()
请求.置地址 (“https://api.fbrowser.site:8443/”)
请求.置类型 (“GET”)

头数据 [1].name = “User-Agent”
头数据 [1].value = “Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.5845.97 Safari/537.36 Core/1.116.438.400 QQBrowser/13.0.6071.400”
请求.置协议头数据_数组 (头数据)
FBrowser_创建URL请求 (请求, , 66666)


二、易带框架创建
    带框架创建基本和全局创建一样,因为框架已经带有环境,所以不需要在创建环境,如要创建环境,就必须在浏览器创建的时候设置;

.版本 2

.子程序 _框架创建_被选择
.局部变量 请求, 类_FBrowser_请求

请求.创建 ()
请求.置地址 (“https://api.fbrowser.site:8443/”)
请求.置类型 (“GET”)

头数据 [1].name = “User-Agent”
头数据 [1].value = “Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.5845.97 Safari/537.36 Core/1.116.438.400 QQBrowser/13.0.6071.400”
请求.置协议头数据_数组 (头数据)

全_浏览器 [1].取主框架 ().创建URL请求 (请求, 77777)


三、火山全局和带框架创建
       其实明白的原理,火山版和易版本基本都是一样的,不一样的是火山版可以采用动态事件,不用像易只能一个全局事件,如下图代码中所采用的智能指针创建的方法;
创建参考代码:

FBrowserCEF3Lib开发手册之创建URL请求的方法以及注意事项

FBrowserCEF3Lib开发手册之创建URL请求的方法以及注意事项


事件参考代码:

FBrowserCEF3Lib开发手册之创建URL请求的方法以及注意事项

FBrowserCEF3Lib开发手册之创建URL请求的方法以及注意事项



四、C#全局和带框架创建
       C#版原理也是如此都一样,如果你跳过了前面的内容不明白原理,建议先看看前面易和火山对原理的描述

全局创建(这里就直接采用的在初始化完毕事件中创建):
[C#] 查看源码 复制代码
//初始化完毕
public override void OnContextInitialized()
{
    Console.WriteLine(MethodBase.GetCurrentMethod().Name);


    FBroSharpRequest sharp_request = new FBroSharpRequest();
    sharp_request.SetURL("https://api.fbrowser.site:8443/");
    sharp_request.SetMethod("GET");

    //添加协议头,这里用list添加,只添加了一个UA
    List<FBroSharpStringMap> heard_list = new List<FBroSharpStringMap>();

    heard_list.Add(new FBroSharpStringMap
    {
        key = "User-Agent",
        value = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.5845.97 Safari/537.36 Core/1.116.438.400 QQBrowser/13.0.6071.400"
    });
    sharp_request.SetHeaderMap_Array(heard_list);

    // FBroSharpRequestContext sharp_request_context;
    URLEvent sharp_event = new URLEvent();
    FBroSharpURLRequest.Create(sharp_request, default, sharp_event, 123456);
 
}


利用按钮创建:
[C#] 查看源码 复制代码
private void 创建URL请求ToolStripMenuItem_Click(object sender, EventArgs e)
{
    if (BrowserEvent.mainbrowser_.IsValid)
    {
        FBroSharpRequest sharp_request = new FBroSharpRequest();
        sharp_request.SetURL("https://api.fbrowser.site:8443/");
        sharp_request.SetMethod("GET");

        //添加协议头,这里用list添加,只添加了一个UA
        List<FBroSharpStringMap> heard_list = new List<FBroSharpStringMap>();

        heard_list.Add(new FBroSharpStringMap
        {
            key = "User-Agent",
            value = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.5845.97 Safari/537.36 Core/1.116.438.400 QQBrowser/13.0.6071.400"
        });
        sharp_request.SetHeaderMap_Array(heard_list);

        // FBroSharpRequestContext sharp_request_context;
        URLEvent sharp_event = new URLEvent();
        BrowserEvent.mainbrowser_.GetMainFrame().CreateURLRequest(sharp_request, sharp_event, 123456);
    }
}

事件参考代码:
[C#] 查看源码 复制代码
public class URLEvent : FBroSharpURLEvent
{
    //用于存放全部数据
    private MemoryStream responseStream_;

    private BinaryWriter writer_;

    public override void Start(long flag, IFBroSharpURLRequest request)
    {
        responseStream_ = new MemoryStream();
        writer_ = new BinaryWriter(responseStream_);

        Console.WriteLine("Name:{0} Flag:{1} Request url:{2} Referrer url:{3}", MethodBase.GetCurrentMethod().Name, flag, request.GetRequestStatus(), request.GetRequest().GetURL(), request.GetRequest().GetReferrerURL());
    }

    public override void End(long flag)
    {
        Console.WriteLine("Name:{0} Flag:{1}", MethodBase.GetCurrentMethod().Name, flag);
           
        writer_ = null;
        responseStream_ = null;
           

        Program.is_close_ = true;
    }

    public override bool GetAuthCredentials(long flag, bool isProxy, string host, int port, string realm, string scheme, IFBroSharpAuthCallback callback)
    {
        Console.WriteLine("Name:{0} Flag:{1}", MethodBase.GetCurrentMethod().Name, flag);
        return false;
    }

    public override void OnDownloadData(long flag, IFBroSharpURLRequest request, Stream data)
    {
        Console.WriteLine("Name:{0} Flag:{1} RequestStatus:{2}", MethodBase.GetCurrentMethod().Name, flag, request.GetRequestStatus());

        //如果存在多数据这个会多次调用本事件,因此数据先进行暂存到writer_中
        var readBytes = new byte[data.Length];
        data.Read(readBytes, 0, readBytes.Length);
        writer_.Write(readBytes);
    }

    public override void OnDownloadProgress(long flag, IFBroSharpURLRequest request, long current, long total)
    {
        Console.WriteLine("Name:{0} Flag:{1} RequestStatus:{2}", MethodBase.GetCurrentMethod().Name, flag, request.GetRequestStatus());
    }

    public override void OnRequestComplete(long flag, IFBroSharpURLRequest request)
    {
        Console.WriteLine("Name:{0} Flag:{1} RequestStatus:{2}", MethodBase.GetCurrentMethod().Name, flag, request.GetRequestStatus());

        //执行完毕再显示数据
        Console.WriteLine(Encoding.UTF8.GetString(responseStream_.ToArray()));

    }

    public override void OnUploadProgress(long flag, IFBroSharpURLRequest request, long current, long total)
    {
        Console.WriteLine("Name:{0} Flag:{1} RequestStatus:{2}", MethodBase.GetCurrentMethod().Name, flag, request.GetRequestStatus());
    }


}


五、重点注意事项
1.如果创建URL请求已经被缓存或者缓存还未失效,则再次获取是在缓存中获取,因此如果要每次都不从缓存获取则获取之前先清理一次缓存,但不建议;
2.全局代理,如果已经在全局环境中及浏览器事件中调用了“获得需授权证书(GetAuthCredentials)”并设置了账号密码,再创建全局请求的时候不会再调用“获得需授权证书”事件设置账号密码,因为账号密码已经在全局环境中生效;

3.无论是全局创建还是带框架创建都不会触发开发者工具在工具里进行显示,这里可以使用第三方工具进行测试;


六、补充说明
1.易和火山上文所描述的代码都在最新打包文件中;
2.C#最新实例在gitee开源库中https://gitee.com/FloatToPoint/fbro-sharp-test.git




签到天数: 5 天

[LV.2]偶尔看看I

0

主题

42

回帖

264

积分

初级会员LV5

太阳月亮星星星星

积分
264
发表于 2025-2-7 13:07:24 | 显示全部楼层
谢谢大佬分享,学到了很多
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关于我们 在线手册 视频教程 赞助支持 CEF官网 易语言官网 火山开发官网
拒绝任何人以任何形式在本网站发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表本网站立场!

网址帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!

Archiver| 手机版| 小黑屋| 联系QQ:283987887 劰载中...

Powered by Discuz! X5.0 GMT+8, 2026-9-17 07:00 , Processed in 0.025225 second(s), 16 queries , Redis On.

 川公网安备51090302000262 蜀ICP备2023034329号
快速回复 返回顶部 返回列表