protected override void ConfigureInMemoryReceiveEndpoint(IInMemoryReceiveEndpointConfigurator configurator) { var testActivity = GetActivityContext <TestActivity>(); var secondActivity = GetActivityContext <SecondTestActivity>(); _requestProxy = new RequestProxy(testActivity, secondActivity); _responseProxy = new ResponseProxy(); configurator.Instance(_requestProxy); configurator.Instance(_responseProxy); _requestAddress = configurator.InputAddress; }
private void Send(string data, int redirections) { _data = data; Encoding encode = Encoding.GetEncoding(_charset); _headers.Remove("Content-Length"); if (!string.IsNullOrEmpty(data) && string.Compare(_method, "post", true) == 0) { _headers["Content-Length"] = string.Concat(Encoding.GetEncoding(_charset).GetBytes(data).Length); if (string.IsNullOrEmpty(_headers["Content-Type"])) { _headers["Content-Type"] = "application/x-www-form-urlencoded; charset=" + _charset; } else if (_headers["Content-Type"].IndexOf("multipart/form-data") == -1) { if (_headers["Content-Type"].IndexOf("application/x-www-form-urlencoded") == -1) { _headers["Content-Type"] += "; application/x-www-form-urlencoded"; } if (_headers["Content-Type"].IndexOf("charset=") == -1) { _headers["Content-Type"] += "; charset=" + _charset; } } data += "\r\n\r\n"; } Uri uri = new Uri(_action); if (_cookieContainer != null) { CookieContainer cc = new CookieContainer(); if (_headers["Cookie"] != null) { cc.SetCookies(uri, _headers["Cookie"]); } Uri uri2 = new Uri(uri.AbsoluteUri.Insert(uri.Scheme.Length + 3, "httprequest.")); CookieCollection cookies = _cookieContainer.GetCookies(uri); foreach (Cookie cookie in cookies) { cc.SetCookies(uri, string.Concat(cookie)); } cookies = _cookieContainer.GetCookies(uri2); foreach (Cookie cookie in cookies) { cc.SetCookies(uri, string.Concat(cookie)); } _headers["Cookie"] = cc.GetCookieHeader(uri); if (string.IsNullOrEmpty(_headers["Cookie"])) { _headers.Remove("Cookie"); } } _headers["Host"] = uri.Authority; string http = _method + " " + uri.PathAndQuery + " HTTP/1.1\r\n"; foreach (string head in _headers) { http += head + ": " + _headers[head] + "\r\n"; } http += "\r\n" + data; _head = http; if (_proxy != null) { RequestProxy pr = new RequestProxy(); pr.Method = _method; pr.Action = _action; pr.Charset = _charset; pr.Head = _head; pr.Data = data; pr.Connection = _proxyConnection; pr.Timeout = _timeout; pr.MaximumAutomaticRedirections = _maximumAutomaticRedirections; ResponseProxy response = _proxy.Send(pr); Action = response.RequestAction; _method = response.RequestMethod; _headers = Utils.ParseHttpRequestHeader(response.RequestHead); _response = new HttpResponse(this, response.ResponseHead); _response.SetStream(response.Response); } else { byte[] request = encode.GetBytes(http); if (_client == null || _remote == null || string.Compare(_remote.Authority, uri.Authority, true) != 0) { _remote = uri; this.Close(); _client = new TcpClient(uri.Host, uri.Port); } try { _stream = getStream(uri); _stream.Write(request, 0, request.Length); } catch { this.Close(); _client = new TcpClient(uri.Host, uri.Port); _stream = getStream(uri); _stream.Write(request, 0, request.Length); } receive(_stream, redirections, uri, encode); } }