Http请求中Referer的设置,CEFSharp带Referer请求


在抓包阿里1688接口的时候,某些接口需要用到 referer 参数,如果不设置该参数,返回值将是空

如图所示:

如果不传 referer 参数,返回结果会不同,返回是 空 

C#  HTTP 请求使用referer

/// <summary>
/// 客户端统一提交数据
/// </summary>
/// <param name="url">WebAPI核心URL地址</param>
/// <param name="data">提交的数据</param>
/// <param name="contentType">指定request.ContentType</param>
/// <returns>返回数据</returns>
public static GZResponseDataModel Post(string url, string data, string contentType, System.Collections.Specialized.NameValueCollection header, Action<HttpWebRequest> requestHandle)
{
    System.Net.HttpWebRequest request = GetRequest(url, header);
    
    request.Method = "POST";
    request.ContentType = contentType;// "application/json;charset=UTF-8";//POST必须使用JSON格式
    if (!String.IsNullOrEmpty(data))
    {
        string paraUrlCoded = data;
        byte[] payload;
        payload = System.Text.Encoding.UTF8.GetBytes(paraUrlCoded);
        request.ContentLength = payload.Length;
        Stream writer = request.GetRequestStream();
        writer.Write(payload, 0, payload.Length);
        writer.Close();
    }

    requestHandle?.Invoke(request);

    return GetResponse(request);
}
GarsonZhang www.yesdotnet.com

requesthandle 回调可以设置 request 请求信息, 例如:

string str = GZ.CefSharpLibrary.APIRequest.RequestByHttp.Post(urlEx, postData, "application/x-www-form-urlencoded", request =>
{
    request.Referer = "https://widget.1688.com/front/ajax/bridge.html?target=brg-0-6561";
    request.Headers.Add("cookie", cookie);
});
GarsonZhang www.yesdotnet.com

 

这样的设置发现返回结果是空,似乎 referer设置无效

解决方案:

经过测试研究,发现对Referer设置要放在所有设置之前,这样才有效

改变 requestHandle 代码的位置

/// <summary>
/// 客户端统一提交数据
/// </summary>
/// <param name="url">WebAPI核心URL地址</param>
/// <param name="data">提交的数据</param>
/// <param name="contentType">指定request.ContentType</param>
/// <returns>返回数据</returns>
public static GZResponseDataModel Post(string url, string data, string contentType, System.Collections.Specialized.NameValueCollection header, Action<HttpWebRequest> requestHandle)
{
    System.Net.HttpWebRequest request = GetRequest(url, header);
requestHandle?.Invoke(request); // 放在这个位置才有效 request.Method = "POST"; request.ContentType = contentType;// "application/json;charset=UTF-8";//POST必须使用JSON格式 if (!String.IsNullOrEmpty(data)) { string paraUrlCoded = data; byte[] payload; payload = System.Text.Encoding.UTF8.GetBytes(paraUrlCoded); request.ContentLength = payload.Length; Stream writer = request.GetRequestStream(); writer.Write(payload, 0, payload.Length); writer.Close(); } //requestHandle?.Invoke(request); // 原来在这个位置,设置无效 return GetResponse(request); }
GarsonZhang www.yesdotnet.com

 

CEFSharp 中post请求IRequest设置Referer

CEFSharp中设置Referer的方法为:request.SetReferrer()

经过测试,如果使用 

request.SetReferrer("***", CefSharp.ReferrerPolicy.Default);

request的ReferrerUrl并没有改变

经过测试使用如下几种方式设置均有效

request.SetReferrer("***", CefSharp.ReferrerPolicy.NeverClearReferrer);
request.SetReferrer("***", CefSharp.ReferrerPolicy.Origin);

 

 

版权声明:本文为YES开发框架网发布内容,转载请附上原文出处连接
YES开发框架
上一篇:C# List排序
下一篇:CEFSharp中请求设置Header
评论列表

发表评论

评论内容
昵称:
关联文章

Http请求Referer设置,CEFSharpReferer请求
CEFSharp请求设置Header
C# CefSharp使用
.NET大型项目开发必备(9)--http请求调用(Post与Get)
RestSharp请求https添加Cookie信息正确姿势
C# HTTPHTTPS Get请求 和 Post 请求
【HttpHelper】HTTP Get和Post请求
C#利用CefSharpChromiumWebBrowser发起Post请求
必须使用适当属性或方法修改referer标头
使用.NET 6开发TodoList应用(10)——实现DELETE请求以及HTTP请求幂等性
C#HTTP请求RestSharp.RestClient发起https请求报错
WPF DataGrid 如何将被选中行到视野
C# 设置或验证 PDF文本域格式
Devexpress使用自图标库图标
vue 路由跳转几种方式(参数)
微信支付:Http头缺少Accept或User-Agent
C# 使用JavaScript给PDF文档设置过期时间
vue自定义组件props设置object属性默认值:
Winform开启一个http服务,web服务
vue项目使用axios发送请求让ajax请求头部携带cookie

联系我们
联系电话:15090125178(微信同号)
电子邮箱:garson_zhang@163.com
站长微信二维码
微信二维码