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开发框架
上一篇:Http请求中Referer的设置,CEFSharp带Referer请求
下一篇:CEFSharp中请求设置Header
评论列表

发表评论

评论内容
昵称:
关联文章

PVE硬盘对应SATA口查询

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