/// <summary> /// Issue a request to a server, and return the (IDisposable) response. /// </summary> /// <exception cref="ShiftIt.Http.TimeoutException">Timeouts while reading or writing sockets.</exception> /// <exception cref="System.Net.Sockets.SocketException">Low level transport exception occured.</exception> public IHttpResponse Request(IHttpRequest request, Action <long> sendProgress = null) { var socket = (request.Secure) ? _conn.ConnectSSL(request.Target, Timeout) : _conn.ConnectUnsecured(request.Target, Timeout); var Tx = new StreamWriter(socket); Tx.Write(request.RequestHead); Tx.Flush(); if (request.DataStream != null) { if (request.DataLength > 0) { StreamTools.CopyBytesToLength(request.DataStream, socket, request.DataLength, Timeout, sendProgress); } else { StreamTools.CopyBytesToTimeout(request.DataStream, socket, sendProgress); } } socket.Flush(); return(_parser.Parse(socket, Timeout)); }
public async Task <HttpResponseMessage> Send(HttpRequestMessage request, CancellationToken token) { var options = request.Properties.ContainsKey(NatsQueueClientOption.ConnectionProperty) ? request.Properties[NatsQueueClientOption.ConnectionProperty] as Options : _clientOption.Options; if (options == null) { throw new ArgumentException( $"ConnectionFactory in option or {nameof(request.Properties)} key name {NatsQueueClientOption.ConnectionProperty} must be set"); } var content = new HttpMessageContent(request); var bytesTask = content.ReadAsByteArrayAsync(); var correlation = request.Headers.GetCorrelationHeader(); var connection = _connection.CreateConnection(options); if (correlation != null) { var responseMsg = await connection.RequestAsync(request.RequestUri.Host, await bytesTask, token); var responseMessage = await _responseParser.Parse(responseMsg.Data, token); return(responseMessage); } var bytes = await bytesTask; connection.Publish(request.RequestUri.Host, bytes); _log.LogTrace("Message to {url} sended", request.RequestUri.Host); return(new HttpResponseMessage(HttpStatusCode.OK)); }
public void the_response_up_to_the_bad_header_is_displayed_in_the_exception_message() { var ex = Assert.Throws <ArgumentException>(() => _subject.Parse(_rawSample, TimeSpan.FromSeconds(1))); Assert.That(ex.Message, Is.EqualTo("Bad header -- BadHeader\r\nFull headers:HTTP/1.1 200 OK\r\n" + "Date: Sun, 03 Feb 2013 13:19:56 GMT\r\n" + "Server: Microsoft-IIS/6.0\r\n" + "X-Powered-By: ASP.NET\r\n" + "Pragma: no-cache\r\n" + "Content-Length: 96\r\n" + "BadHeader\r\n" + "Content-Type: text/html\r\n" + "Expires: Sun, 03 Feb 2013 13:18:56 GMT\r\n" + "Cache-control: no-store\r\n\r")); }
public async Task Handle(ConsumeResult <byte[], byte[]> message) { var response = await _responseParser.Parse(message.Message.Value, CancellationToken.None); var correlationId = response.Headers.GetCorrelationHeader(); if (string.IsNullOrWhiteSpace(correlationId)) { _log.LogError($"consume response, but {QueueHeaders.CorrelationId} not be set. Response will be lost"); return; } _tasks.TryRemove(correlationId, out var taskSource); if (taskSource == null) { _log.LogError("Received response, but task source is lost. The Message will be removed"); return; } taskSource.SetResult(response); }
public IHttpResponse Request(IHttpRequest request) { var socket = _conn.Connect(request.Target, Timeout); var Tx = new StreamWriter(socket); Tx.Write(request.RequestHead()); Tx.Flush(); if (request.DataStream != null) { if (request.DataLength > 0) { ExpectedLengthStream.CopyBytesToLength(request.DataStream, socket, request.DataLength); } else { ExpectedLengthStream.CopyBytesToTimeout(request.DataStream, socket); } } socket.Flush(); return(_parser.Parse(socket)); }
public void setup() { _rawSample = HttpSample.SimpleResponse(); _subject = new HttpResponseParser(); _result = _subject.Parse(_rawSample); }
public void setup() { _rawSample = HttpSample.FailedResponse(); _subject = new HttpResponseParser(); _result = _subject.Parse(_rawSample, TimeSpan.Zero); }
public void setup() { _rawSample = HttpSample.WithMixedCaseHeaders(); _subject = new HttpResponseParser(); _result = _subject.Parse(_rawSample, TimeSpan.FromSeconds(1)); }
public void setup() { _rawSample = HttpSample.GzippedResponse(); _subject = new HttpResponseParser(); _result = _subject.Parse(_rawSample, TimeSpan.Zero); }
public void setup() { _rawSample = HttpSample.WithDuplicatedHeaders(); _subject = new HttpResponseParser(); _result = _subject.Parse(_rawSample, TimeSpan.Zero); }
public void setup() { _rawSample = HttpSample.PlainTextWithIncorrectGzipHeader(); _subject = new HttpResponseParser(); _result = _subject.Parse(_rawSample, TimeSpan.FromSeconds(1)); }