public static void Mock() { BHttpContext.SetCurrent(); MHttpRequest request = new MHttpRequest(); MHttpResponse response = new MHttpResponse(); MHttpCookieCollection cookies = new MHttpCookieCollection(); response.CookiesGet = () => cookies; response.OnCookieAddHttpCookie = (cookie) => Nothing(); response.RequestGet = () => request; cookies.GetString = (key) => null; Dictionary <object, object> items = new Dictionary <object, object>(); Dictionary <string, string> reqItems = new Dictionary <string, string>(); request.ItemGetString = (key) => reqItems.ContainsKey(key) ? reqItems[key] : null; new MHttpContext(BHttpContext.Current) { ItemsGet = () => items, RequestGet = () => request, ResponseGet = () => response }; MHttpUtility.ParseQueryStringString = ParseQueryString; MHttpUtility.UrlEncodeString = (url) => Uri.EscapeDataString(url).Replace("%20", "+"); }
async Task MainBodyAsync(MHttpStream localStream) { try { while (true) { MHttpRequest request = await MHttpRequest.ReadAsync(localStream, m_info.MaxContentSize).ConfigureAwait(false); var sendFunc = CreateSendFunc(request); if (request.Path.IndexOf("view_video.php?viewkey") != -1) { await GetSeleteHtmlAsync(sendFunc, localStream).ConfigureAwait(false); } else { await GetOneHtmlAsync(sendFunc, localStream).ConfigureAwait(false); } } } finally { localStream?.Close(); } }
static Func <MHttpStream, Task> CreateSendFunc(MHttpRequest request) { request.Headers.RemoveHopByHopHeaders(); request.Headers.SetMyStandardRequestHeaders(); request.Headers.Set("User-Agent", "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36"); return(request.CreateSendAsync()); }
static void ReadConnectRequest(Socket socket, Func <string, TunnelPackAction> func) { Task.Run(async() => { Stream stream = new NetworkStream(socket, true); MHttpStream httpStream = new MHttpStream(socket, stream, 1024); MHttpRequest request = await MHttpRequest.ReadAsync(httpStream, 1024 * 1024).ConfigureAwait(false); MHttpResponse response = MHttpResponse.Create(200); await response.SendAsync(httpStream).ConfigureAwait(false); Uri uri = new Uri($"http://{request.Path}/"); func(uri.Host)(uri, new TunnelPack(socket, stream)); }); }