void SendToTarget(Uri targetUrl, LinkbackSendParameters parameters) { HttpWebRequestAbstraction request = HttpWebRequestAbstraction.Create(targetUrl); SetupRequest(request, parameters); using (HttpWebResponseAbstraction response = request.GetResponse()) { if (!response.IsHttpStatusCode2XX) { throw new LinkbackSendException(String.Format(CultureInfo.InvariantCulture, "Http error while sending {0} for {1}", Name, targetUrl)); } Stream receiveStream = response.GetResponseStream(); if (response.ContentEncoding.ToUpperInvariant().Contains("GZIP")) { receiveStream = new GZipStream(receiveStream, CompressionMode.Decompress); } else if (response.ContentEncoding.ToUpperInvariant().Contains("DEFLATE")) { receiveStream = new DeflateStream(receiveStream, CompressionMode.Decompress); } StreamReader streamReader = new StreamReader(receiveStream, Encoding.UTF8); ParseResponse(targetUrl, streamReader.ReadToEnd()); } }
public void SetupRequestForPingback(HttpWebRequestAbstraction request) { if (SourceUrl == null) { throw new InvalidOperationException("SourceUrl is null"); } if (TargetUrl == null) { throw new InvalidOperationException("TargetUrl is null"); } string post_content = String.Format(CultureInfo.InvariantCulture, "<?xml version=\"1.0\"?><methodCall><methodName>pingback.ping</methodName><params><param><value><string>{0}</string></value></param><param><value><string>{1}</string></value></param></params></methodCall>", SourceUrl.AbsoluteUri, TargetUrl.AbsoluteUri); byte[] post_bytes = new UTF8Encoding().GetBytes(post_content); request.Method = "POST"; request.ContentType = "text/xml"; request.ContentLength = post_bytes.Length; using (Stream writeStream = request.GetRequestStream()) { writeStream.Write(post_bytes, 0, post_bytes.Length); } }
protected override Uri DiscoveryTargetUrl(Uri sendUrl, LinkbackSendParameters parameters) { HttpWebRequestAbstraction request = HttpWebRequestAbstraction.Create(sendUrl); using (HttpWebResponseAbstraction response = request.GetResponse()) { if (response.IsHttpStatusCode2XX) { return(FindTargetUrl(sendUrl, response)); } } throw new LinkbackSendException(String.Format(CultureInfo.InvariantCulture, "Http error while discovering {0} url for {1}", Name, sendUrl)); }
public void LinkbackSendParameters_SetupRequestForPingback_SourceUrl_Null_Throws_InvalidOperationException() { var parameters = new LinkbackSendParameters(); parameters.SourceUrl = null; parameters.TargetUrl = new Uri("http://localhost"); var requestImplementation = new Mock <IHttpWebRequestImplementation>(); var request = new HttpWebRequestAbstraction(requestImplementation.Object); Assert.Throws <InvalidOperationException>(() => { parameters.SetupRequestForPingback(request); }); }
public void SetupRequestForTrackback(HttpWebRequestAbstraction request) { string post_content = BuildPostContent(); byte[] post_bytes = new UTF8Encoding().GetBytes(post_content); request.Method = "POST"; request.ContentType = "application/x-www-form-urlencoded"; request.ContentLength = post_bytes.Length; using (Stream writeStream = request.GetRequestStream()) { writeStream.Write(post_bytes, 0, post_bytes.Length); } }
protected string DownloadSourceContent(Uri sourceUrl) { HttpWebRequestAbstraction request = HttpWebRequestAbstraction.Create(sourceUrl); using (HttpWebResponseAbstraction response = request.GetResponse()) { if (response.IsHttpStatusCode2XX) { Stream receiveStream = response.GetResponseStream(); StreamReader streamReader = new StreamReader(receiveStream, Encoding.UTF8); return(streamReader.ReadToEnd()); } } throw new LinkbackReceiveException(String.Format(CultureInfo.InvariantCulture, "Http error while discovering {0} source at {1}", Name, sourceUrl)); }
protected override void SetupRequest(HttpWebRequestAbstraction request, LinkbackSendParameters parameters) { parameters.SetupRequestForPingback(request); }
protected Linkback(IHttpWebRequestImplementation implementation) { this.HttpWebRequestAbstraction = new HttpWebRequestAbstraction(implementation); }
protected abstract void SetupRequest(HttpWebRequestAbstraction request, LinkbackSendParameters parameters);