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开发框架网发布内容,转载请附上原文出处连接
post YES开发框架