/// <summary> /// 一个url发起异步的http请求 /// </summary> /// <param name="url"></param> /// <param name="_query"></param> /// <param name="files"></param> /// <param name="callback"></param> public static void BeginPostFromDataString(string url, IWebParamData _query, PostFromDataParam <PostFileData> files, Action <string, System.Exception> callback) { BeginPostFromData(url, _query, files, (res, e) => { Process_GetHttpResponseString(res, e, callback); }); }
private bool CheckHederData(IWebParamData s, out string accept, out int version) { accept = ""; version = 0; var upgrade = (s["Upgrade"] + "").Replace(" ", ""); if (upgrade.IndexOf("websocket", StringComparison.OrdinalIgnoreCase) == -1) { return(false); } var connection = (s["Connection"] + "").Replace(" ", ""); if (connection.IndexOf("upgrade", StringComparison.OrdinalIgnoreCase) == -1) { return(false); } var secWebSocketVersion = (s["Sec-WebSocket-Version"] + "").Replace(" ", ""); version = GetVersionList(secWebSocketVersion); switch (version) { case 13: break; default: { //版本错误 return(false); } } var secWebSocketKey = s["Sec-WebSocket-Key"] + ""; //检查webSocket的请求头 if (string.IsNullOrEmpty(secWebSocketKey)) { return(false); } var keyData = ToBase64Bytes(secWebSocketKey); if (keyData.Length != 16) { return(false); } accept = Sha1Base64String(secWebSocketKey + "258EAFA5-E914-47DA-95CA-C5AB0DC85B11"); return(true); }
/// <summary> /// /// </summary> /// <param name="url"></param> /// <param name="_query"></param> /// <param name="files"></param> /// <returns></returns> public static string PostFromDataString(string url, IWebParamData _query, PostFromDataParam <PostFileData> files, IWebParamData header = null) { try { var response = PostFromData(url, _query, files, header); return(GetStringFromResponse(response)); } catch //(Exception ex) { return(""); } }
public virtual void PushSystemEventMsg(uint userId, string eventCode, IWebParamData eventData = null) { var msg = new QL.Common.MSG_S_SystemPushMsg() { TargerUser = userId, EventCode = eventCode, EventData = eventData?.Select(p => new QL.Common.KeyValueData() { Key = p.Key, Value = p.Value }).ToArray() }; QL.Server.RedisOP.RedisOperation.SendMessageToUser(userId, msg); }
/// <summary> /// /// </summary> /// <param name="url"></param> /// <param name="_query"></param> /// <param name="files"></param> /// <returns></returns> public static HttpWebResponse PostFromData(string url, IWebParamData _query, PostFromDataParam <PostFileData> files, IWebParamData header = null) { //写入请求流 var req = BuilderRequest(url, _query, files, r => { if (header != null) { foreach (var kv in header) { r.Headers[kv.Key] = kv.Value; } } }); HttpWebResponse res = (HttpWebResponse)req.GetResponse(); return(res); }
/// <summary> /// 将参数合并到Url连接中 /// </summary> /// <param name="url">需要合并参数的url</param> /// <param name="param">需要合并的参数</param> /// <param name="isCover">指定使用覆盖模式,如果需要用合并参数覆盖原url参数则为 true。如果使用原url参数覆盖合并参数则为 false </param> /// <returns></returns> public static string MergeUrlQueryString(string url, IWebParamData param, bool isCover = false) { if (param == null) { return(url); } if (string.IsNullOrEmpty(url)) { return("?" + param.ToUrl()); } var wen_index = url.IndexOf('?'); if (wen_index < 0) { return(url + "?" + param.ToUrl()); } if (wen_index + 1 >= url.Length) { return(url + param.ToUrl()); } var path = url.Substring(0, wen_index); var qstr = url.Substring(wen_index + 1); var q_p = WebParamData.FromUrl(qstr); if (isCover) { //用合并参数覆盖原url参数 foreach (var r in param) { q_p[r.Key] = r.Value; } return($"{path}?{q_p.ToUrl()}"); } else { //用原url参数覆盖合并参数 foreach (var r in q_p) { param[r.Key] = r.Value; } return($"{path}?{param.ToUrl()}"); } }
/*********************** Begin Method *************************/ /// <summary> /// 一个url发起异步的http请求 /// </summary> /// <param name="url"></param> /// <param name="_query"></param> /// <param name="files"></param> /// <param name="callback"></param> static void BeginPostFromData(string url, IWebParamData _query, PostFromDataParam <PostFileData> files, Action <HttpWebResponse, System.Exception> callback) { ThreadPoolProviderManager.QueueUserWorkItem(() => { try { var req = BuilderRequest(url, _query, files, null); using (var res = (HttpWebResponse)req.GetResponse()) { callback?.Invoke(res, null); } } catch (System.Exception ex) { callback?.Invoke(null, ex); } }); }
/// <summary> /// /// </summary> /// <returns></returns> public virtual bool CheckAuth(IWebParamData param, string url) { if (param == null) { return(false); } if (param.CheckTimeOut(5 * 60)) { return(false); } if (!param.VerifySign(PublicRsaKey, url)) { return(false); } return(true); }
public virtual void PushSystemEventMsg(uint[] userIds, string eventCode, IWebParamData eventData = null) { if (userIds == null && userIds.Length <= 0) { return; } var msg = new QL.Common.MSG_S_SystemPushMsg() { TargerUser = 0, EventCode = eventCode, EventData = eventData?.Select(p => new QL.Common.KeyValueData() { Key = p.Key, Value = p.Value }).ToArray() }; foreach (var userId in userIds) { msg.TargerUser = userId; QL.Server.RedisOP.RedisOperation.SendMessageToUser(userId, msg); } }
private static HttpWebRequest BuilderRequest(string url, IWebParamData _query, PostFromDataParam <PostFileData> files, Action <HttpWebRequest> BeforSendHeader) { byte[] _newlinebytes = baseEncoding.GetBytes("\r\n"); var _newlinebytescount = _newlinebytes.Length; using (var ms = new MemoryStream()) { #region 文件流 //写入请求头参数信息,query StringBuilder _queryStringbuffer = new StringBuilder(); foreach (var p in _query) { _queryStringbuffer.Length = 0; _queryStringbuffer.Append("--"); _queryStringbuffer.Append(ConstString.BOUNDARY); _queryStringbuffer.Append("\r\n"); _queryStringbuffer.Append("Content-Disposition: form-data; name=\"" + p.Key + "\"\r\n\r\n"); _queryStringbuffer.Append(p.Value); _queryStringbuffer.Append("\r\n"); //写入请求流 var data = baseEncoding.GetBytes(_queryStringbuffer.ToString()); ms.Write(data, 0, data.Length); } if (files != null) { #region 写文件 //写文件 foreach (var f in files) { var file = f.Value; if (!file.IsHasFile) { continue; } _queryStringbuffer.Length = 0; _queryStringbuffer.Append("--"); _queryStringbuffer.Append(ConstString.BOUNDARY); _queryStringbuffer.Append("\r\n"); _queryStringbuffer.Append("Content-Disposition:form-data;name=\"" + f.Key + "\";filename=\"" + file.FileName + "\"\r\n"); _queryStringbuffer.Append("Content-Type:application/octet-stream\r\n\r\n"); //写入请求流 var data = baseEncoding.GetBytes(_queryStringbuffer.ToString()); ms.Write(data, 0, data.Length); file.WriteTo(ms); //写入更新的换行符 ms.Write(_newlinebytes, 0, _newlinebytescount); } ; #endregion } #endregion //写入结束标记 //byte[] end_data = ("--" + BOUNDARY + "--\r\n").getBytes();//数据结束标志 byte[] end_data = baseEncoding.GetBytes($"--" + ConstString.BOUNDARY + "--\r\n");//数据结束标志 ms.Write(end_data, 0, end_data.Length); HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url); req.Method = "post"; req.ContentLength = ms.Length; req.ContentType = ConstString.MULTIPART_FORM_DATAContextType; BeforSendHeader?.Invoke(req); using (var req_stream = req.GetRequestStream()) { if (ms.CanSeek) { ms.Position = 0; } ms.CopyTo(req_stream); req_stream.Flush(); return(req); } } }
private void ReadHeaderEnd(string data) { HttpRequestMatch match; if (!HttpRequestMatch.TryParse(data, out match)) { ErrorRequest(); return; } var head = match.Header; this._header = head; string accept; int version; var response = ""; if (!CheckHederData(head, out accept, out version)) { ErrorRequest(); return; } switch (version) { case 13: { #region Version:13 var additionalFields = string.Empty; var protocol = head["Sec-WebSocket-Protocol"]; if (!string.IsNullOrEmpty(protocol)) { additionalFields += "Sec-WebSocket-Protocol: " + protocol + DefaultValueManager.NewLine; } //追加一条服务器信息 additionalFields += AppendServerHeader; additionalFields += DefaultValueManager.NewLine; response = string.Format(AcceptRequest, accept, additionalFields); var ip = head["X-Forwarded"]; if (string.IsNullOrEmpty(ip)) { ip = head["X-Real-IP"]; } if (!string.IsNullOrEmpty(ip)) { this.webSocketSession?.AcceptSocket?.SetRemoteIP(ip); } this.webSocketSession.SetHandle(new WebSocketHandleProcessV13(this.webSocketSession) { _header = _header }); WebSocketSession.SendDataToClient(response.GetUtf8Bytes()); #endregion this.webSocketSession.OnConnect(DefaultValueManager.EmptyMethod); return; } default: { //服务器暂时不支持其他协议版本的websocket response = "HTTP/1.1 401" + DefaultValueManager.NewLine + "Sec-WebSocket-Version:13"; WebSocketSession.SendDataToClient(response.GetUtf8Bytes()); return; } } }
/// <summary> /// 停止当前页面的请求。使用 POST 提交方式 将请求重定向到新 URL 并指定该新 URL。 /// </summary> public static void RedirectPostUrl(this HttpResponseBase response, string url, IWebParamData param) { response.RedirectPostUrl(url, param, r => true); }
/// <summary> /// 停止当前页面的请求。使用 POST 提交方式 将请求重定向到新 URL 并指定该新 URL。 /// </summary> public static void RedirectPostUrl(this HttpResponseBase response, string url, IWebParamData param, CheckUrlKeyCall func) { response.Write(param.ToPostHtml(url, func)); response.Flush(); response.End(); }
private IActionResult ProcessUserLogonResponse(UserLogonCatchInfo userinfo) { IWebParamData param = null; //尝试获取该用户的分享参数 //if (!string.IsNullOrEmpty(userinfo.UnionID)) //{ // try // { // var url = RedisTools.ReadShareParam(userinfo.UnionID); // if (!string.IsNullOrEmpty(url)) // { // param = Uyi.Web.WebParamData.FromUrl(url); // } // } // catch { } //} if (param == null) { param = new WebParamData(); } int parentUser = 0; //if (!int.TryParse(param["parent"], out parentUser)) //{ // int.TryParse(context.Request["parent"], out parentUser); //} //初始化数据 string openid = userinfo.OpenID; string unionId = userinfo.UnionID; string headimg = userinfo.HeadImg; string nickname = userinfo.NickName; //调用数据接口 DataSet ds; int retVal = do_WEB_ALL_UserLogon(unionId, userinfo, userinfo.SNSID, out ds); this.WriteLog($"玩家登陆:retVal = {retVal}"); switch (retVal) { case 1: break; case -2: { return(Json(new { status = "showbox", msg = "您的账号已被封停,请联系客服", })); } default: { return(Json(new { status = "showtip", msg = "服务器维护中...", })); } } var dr = ds.Tables[0].Rows[0]; var userid = dr.GetData("userid").ConvertToUInt32(); if (userid <= 0) { return(WriteFail("登录失败")); } //userinfo.HeadImg = userinfo.HeadImg; //userinfo.NickName = dr["nickname"].ToString(); var catch_userTokken = GetCatchUserToken(userinfo); param["status"] = "success"; param["accesstoken"] = GetUserAccessToken(userid); param["catchtoken"] = catch_userTokken; //UyiDebug.WriteLog($"用户APP登录输出:{param.ToJson()}"); //响应结果数据 return(Json(param)); }