public static HttpWebResponse SendRequest(string requestUri, HttpRequestFilter filter) { HttpWebRequest request = CreateHttpWebRequest(requestUri, true, null, null); if (filter != null) { filter(request); } // get the response try { HttpWebResponse response = (HttpWebResponse)request.GetResponse(); //hack: For some reason, disabling auto-redirects also disables throwing WebExceptions for 300 status codes, //so if we detect a non-2xx error code here, throw a web exception. int statusCode = (int)response.StatusCode; if (statusCode > 299) { throw new WebException(response.StatusCode.ToString() + ": " + response.StatusDescription, null, WebExceptionStatus.UnknownError, response); } return(response); } catch (WebException e) { if (e.Status == WebExceptionStatus.Timeout) { //throw a typed exception that lets callers know that the response timed out after the request was sent throw new WebResponseTimeoutException(e); } else { throw; } } }
/// <summary> /// Create an XmlRpcClient for the specified host name /// </summary> /// <param name="hostname"></param> public XmlRpcClient(string hostname, string userAgent, HttpRequestFilter filter, string transportEncoding) { _hostname = hostname; _userAgent = userAgent; _requestFilter = filter; _transportEncoding = transportEncoding; }
public static HttpWebResponse SendAuthenticatedHttpRequest(string requestUri, HttpRequestFilter filter, HttpRequestFilter credentialsFilter) { // build filter list ArrayList filters = new ArrayList(); if (filter != null) filters.Add(filter); if (credentialsFilter != null) filters.Add(credentialsFilter); // send request try { return HttpRequestHelper.SendRequest( requestUri, CompoundHttpRequestFilter.Create(filters.ToArray(typeof(HttpRequestFilter)) as HttpRequestFilter[])); } catch (BlogClientOperationCancelledException) { // if we are in silent mode and failed to authenticate then try again w/o requiring auth if (BlogClientUIContext.SilentModeForCurrentThread) { return HttpRequestHelper.SendRequest(requestUri, filter); } else { throw; } } }
private static XmlDocument SimpleRequest(string method, ref Uri uri, HttpRequestFilter filter, out WebHeaderCollection responseHeaders, params string[] parameters) { string absUri = UrlHelper.SafeToAbsoluteUri(uri); if (parameters.Length > 0) { FormData formData = new FormData(true, parameters); if (absUri.IndexOf('?') == -1) absUri += "?" + formData.ToString(); else absUri += "&" + formData.ToString(); } RedirectHelper.SimpleRequest simpleRequest = new RedirectHelper.SimpleRequest(method, filter); HttpWebResponse response = RedirectHelper.GetResponse(absUri, new RedirectHelper.RequestFactory(simpleRequest.Create)); try { uri = response.ResponseUri; responseHeaders = response.Headers; return ParseXmlResponse(response); } finally { if (response != null) response.Close(); } }
/// <param name="uri"></param> /// <param name="methods">An array of HTTP methods that should be tried until one of them does not return 405.</param> private static string GetEtagImpl(string uri, HttpRequestFilter requestFilter, params string[] methods) { try { HttpWebResponse response = RedirectHelper.GetResponse(uri, new RedirectHelper.RequestFactory(new RedirectHelper.SimpleRequest(methods[0], requestFilter).Create)); try { return(FilterWeakEtag(response.Headers["ETag"])); } finally { response.Close(); } } catch (WebException we) { if (methods.Length > 1 && we.Status == WebExceptionStatus.ProtocolError) { HttpWebResponse resp = we.Response as HttpWebResponse; if (resp != null && (resp.StatusCode == HttpStatusCode.MethodNotAllowed || resp.StatusCode == HttpStatusCode.NotImplemented)) { string[] newMethods = new string[methods.Length - 1]; Array.Copy(methods, 1, newMethods, 0, newMethods.Length); return(GetEtagImpl(uri, requestFilter, newMethods)); } } throw; } }
/// <summary>打开</summary> protected override Boolean OnOpen() { // 默认80端口 if (!Active && Remote.Port == 0) { Remote.Port = 80; } if (Remote.Address.IsAny()) { Remote = new NetUri(Request.Url + ""); } //Request.Method = Method; //Request.Url = Url; // 添加过滤器 if (SendFilter == null) { SendFilter = new HttpRequestFilter { Client = this } } ; return(base.OnOpen()); }
private static XmlDocument SimpleRequest(string method, ref Uri uri, HttpRequestFilter filter, out WebHeaderCollection responseHeaders, params string[] parameters) { string absUri = UrlHelper.SafeToAbsoluteUri(uri); if (parameters.Length > 0) { FormData formData = new FormData(true, parameters); if (absUri.IndexOf('?') == -1) { absUri += "?" + formData.ToString(); } else { absUri += "&" + formData.ToString(); } } RedirectHelper.SimpleRequest simpleRequest = new RedirectHelper.SimpleRequest(method, filter); HttpWebResponse response = RedirectHelper.GetResponse(absUri, new RedirectHelper.RequestFactory(simpleRequest.Create)); try { uri = response.ResponseUri; responseHeaders = response.Headers; return(ParseXmlResponse(response)); } finally { if (response != null) { response.Close(); } } }
/// <summary> /// Create an XmlRpcClient for the specified host name /// </summary> /// <param name="hostname"></param> public XmlRpcClient(string hostname, string userAgent, HttpRequestFilter filter, string transportEncoding) { _hostname = hostname; _userAgent = userAgent; _requestFilter = filter; _transportEncoding = transportEncoding; }
public AtomMediaUploader(XmlNamespaceManager nsMgr, HttpRequestFilter requestFilter, string collectionUri, IBlogClientOptions options, XmlRestRequestHelper xmlRestRequestHelper) { this._nsMgr = nsMgr; this._requestFilter = requestFilter; this._collectionUri = collectionUri; this._options = options; this.xmlRestRequestHelper = xmlRestRequestHelper; }
public AtomMediaUploader(XmlNamespaceManager nsMgr, HttpRequestFilter requestFilter, string collectionUri, IBlogClientOptions options, XmlRestRequestHelper xmlRestRequestHelper) { this._nsMgr = nsMgr; this._requestFilter = requestFilter; this._collectionUri = collectionUri; this._options = options; this.xmlRestRequestHelper = xmlRestRequestHelper; }
public static HttpWebResponse SafeSendRequest(string requestUri, HttpRequestFilter filter) { try { return(SendRequest(requestUri, filter)); } catch (WebException we) { if (ApplicationDiagnostics.TestMode) { LogException(we); } return(null); } }
public SendFactory(string etag, string method, HttpRequestFilter filter, string contentType, XmlDocument doc, string encoding) { _etag = etag; _method = method; _filter = filter; _contentType = contentType; _doc = doc; //select the encoding _encodingToUse = new UTF8Encoding(false, false); try { _encodingToUse = StringHelper.GetEncoding(encoding, _encodingToUse); } catch (Exception ex) { Trace.Fail("Error while getting transport encoding: " + ex.ToString()); } }
public static Stream SafeDownloadFile(string fileUrl, out string responseUri, HttpRequestFilter filter) { responseUri = null; try { HttpWebResponse response = SafeSendRequest(fileUrl, filter); if (response != null) { responseUri = UrlHelper.SafeToAbsoluteUri(response.ResponseUri); return response.GetResponseStream(); } else return null; } catch (Exception ex) { Trace.WriteLine("Unable to download file \"" + fileUrl + "\" during Blog service detection: " + ex.ToString()); return null; } }
protected virtual XmlDocument Send(string method, ref Uri uri, string etag, HttpRequestFilter filter, string contentType, XmlDocument doc, string encoding, string filename, bool ignoreResponse, out WebHeaderCollection responseHeaders) { if (!String.IsNullOrEmpty(filename)) { return(MultipartSend(method, ref uri, etag, filter, contentType, doc, encoding, filename, ignoreResponse, out responseHeaders)); } string absUri = UrlHelper.SafeToAbsoluteUri(uri); Debug.WriteLine("XML Request to " + absUri + ":\r\n" + doc.InnerXml); SendFactory sf = new SendFactory(etag, method, filter, contentType, doc, encoding); HttpWebResponse response = RedirectHelper.GetResponse(absUri, new RedirectHelper.RequestFactory(sf.Create)); try { responseHeaders = response.Headers; uri = response.ResponseUri; if (ignoreResponse || response.StatusCode == HttpStatusCode.NoContent) { return(null); } else { XmlDocument xmlDocResponse = ParseXmlResponse(response); return(xmlDocResponse); } } finally { if (response != null) { response.Close(); } } }
public MultipartMimeSendFactory(HttpRequestFilter filter, XmlDocument xmlRequest, string filename, string encoding, MultipartMimeRequestHelper multipartMimeRequestHelper) { if (xmlRequest == null) { throw new ArgumentNullException(); } // Add boundary to params _filename = filename; _xmlDoc = xmlRequest; _filter = filter; _multipartMimeRequestHelper = multipartMimeRequestHelper; //select the encoding _encoding = new UTF8Encoding(false, false); try { _encoding = StringHelper.GetEncoding(encoding, _encoding); } catch (Exception ex) { Trace.Fail("Error while getting transport encoding: " + ex.ToString()); } }
/// <summary> /// Retrieve the specified URI, using the given filter, with the supplied parameters (if any). /// The parameters parameter should be an even number of strings, where each odd element is /// a param name and each following even element is the corresponding param value. For example, /// to retrieve http://www.vox.com/atom?svc=post&id=100, you would say: /// /// Get("http://www.vox.com/atom", "svc", "post", "id", "100"); /// /// If a param value is null or empty string, that param will not be included in the final URL /// (i.e. the corresponding param name will also be dropped). /// </summary> public virtual XmlDocument Get(ref Uri uri, HttpRequestFilter filter, out WebHeaderCollection responseHeaders, params string[] parameters) { return(SimpleRequest("GET", ref uri, filter, out responseHeaders, parameters)); }
public HttpWebResponse SendAuthenticatedHttpRequest(string requestUri, int timeoutMs, HttpRequestFilter filter) { return BlogClientHelper.SendAuthenticatedHttpRequest(requestUri, filter, CreateAuthorizationFilter()); }
public static HttpWebResponse SendAuthenticatedHttpRequest(string requestUri, HttpRequestFilter filter, HttpRequestFilter credentialsFilter) { // build filter list ArrayList filters = new ArrayList(); if (filter != null) { filters.Add(filter); } if (credentialsFilter != null) { filters.Add(credentialsFilter); } // send request try { return(HttpRequestHelper.SendRequest( requestUri, CompoundHttpRequestFilter.Create(filters.ToArray(typeof(HttpRequestFilter)) as HttpRequestFilter[]))); } catch (BlogClientOperationCancelledException) { // if we are in silent mode and failed to authenticate then try again w/o requiring auth if (BlogClientUIContext.SilentModeForCurrentThread) { return(HttpRequestHelper.SendRequest(requestUri, filter)); } else { throw; } } }
public AtomMediaUploader(XmlNamespaceManager nsMgr, HttpRequestFilter requestFilter, string collectionUri, IBlogClientOptions options) : this(nsMgr, requestFilter, collectionUri, options, new XmlRestRequestHelper()) { }
public XmlDocument Get(ref Uri uri, HttpRequestFilter filter, params string[] parameters) { WebHeaderCollection responseHeaders; return Get(ref uri, filter, out responseHeaders, parameters); }
/// <summary> /// Performs an HTTP DELETE on the URL and contains no body, returns the body as an XmlDocument if there is one /// </summary> public virtual XmlDocument Delete(Uri uri, HttpRequestFilter filter, out WebHeaderCollection responseHeaders) { return SimpleRequest("DELETE", ref uri, filter, out responseHeaders, new string[] { }); }
private CompoundHttpRequestFilter(HttpRequestFilter[] filters) { _filters = filters; }
/// <summary> /// Performs an HTTP PUT with the specified XML document as the request body. /// </summary> public XmlDocument Put(ref Uri uri, string etag, HttpRequestFilter filter, string contentType, XmlDocument doc, string encoding, bool ignoreResponse) { WebHeaderCollection responseHeaders; return(Put(ref uri, etag, filter, contentType, doc, encoding, ignoreResponse, out responseHeaders)); }
public static HttpWebResponse SafeSendRequest(string requestUri, HttpRequestFilter filter) { try { return SendRequest(requestUri, filter); } catch (WebException we) { if (ApplicationDiagnostics.TestMode) LogException(we); return null; } }
public static HttpRequestFilter Create(HttpRequestFilter[] filters) { return new HttpRequestFilter(new CompoundHttpRequestFilter(filters).Filter); }
public static HttpWebResponse SendRequest(string requestUri, HttpRequestFilter filter) { HttpWebRequest request = CreateHttpWebRequest(requestUri, true, null, null); if (filter != null) filter(request); // get the response try { HttpWebResponse response = (HttpWebResponse)request.GetResponse(); //hack: For some reason, disabling auto-redirects also disables throwing WebExceptions for 300 status codes, //so if we detect a non-2xx error code here, throw a web exception. int statusCode = (int)response.StatusCode; if (statusCode > 299) throw new WebException(response.StatusCode.ToString() + ": " + response.StatusDescription, null, WebExceptionStatus.UnknownError, response); return response; } catch (WebException e) { if (e.Status == WebExceptionStatus.Timeout) { //throw a typed exception that lets callers know that the response timed out after the request was sent throw new WebResponseTimeoutException(e); } else throw; } }
/// <param name="uri"></param> /// <param name="methods">An array of HTTP methods that should be tried until one of them does not return 405.</param> private static string GetEtagImpl(string uri, HttpRequestFilter requestFilter, params string[] methods) { try { HttpWebResponse response = RedirectHelper.GetResponse(uri, new RedirectHelper.RequestFactory(new RedirectHelper.SimpleRequest(methods[0], requestFilter).Create)); try { return FilterWeakEtag(response.Headers["ETag"]); } finally { response.Close(); } } catch (WebException we) { if (methods.Length > 1 && we.Status == WebExceptionStatus.ProtocolError) { HttpWebResponse resp = we.Response as HttpWebResponse; if (resp != null && (resp.StatusCode == HttpStatusCode.MethodNotAllowed || resp.StatusCode == HttpStatusCode.NotImplemented)) { string[] newMethods = new string[methods.Length - 1]; Array.Copy(methods, 1, newMethods, 0, newMethods.Length); return GetEtagImpl(uri, requestFilter, newMethods); } } throw; } }
public static string GetEtag(string uri, HttpRequestFilter requestFilter) { return GetEtagImpl(uri, requestFilter, "HEAD", "GET"); }
public SendFactory(string etag, string method, HttpRequestFilter filter, string contentType, XmlDocument doc, string encoding) { _etag = etag; _method = method; _filter = filter; _contentType = contentType; _doc = doc; //select the encoding _encodingToUse = new UTF8Encoding(false, false); try { _encodingToUse = StringHelper.GetEncoding(encoding, _encodingToUse); } catch (Exception ex) { Trace.Fail("Error while getting transport encoding: " + ex.ToString()); } }
/// <summary> /// Performs an HTTP PUT with the specified XML document as the request body. /// </summary> public XmlDocument Put(ref Uri uri, string etag, HttpRequestFilter filter, string contentType, XmlDocument doc, string encoding, bool ignoreResponse, out WebHeaderCollection responseHeaders) { return Send("PUT", ref uri, etag, filter, contentType, doc, encoding, null, ignoreResponse, out responseHeaders); }
public MultipartMimeSendFactory(HttpRequestFilter filter, XmlDocument xmlRequest, string filename, string encoding, MultipartMimeRequestHelper multipartMimeRequestHelper) { if (xmlRequest == null) throw new ArgumentNullException(); // Add boundary to params _filename = filename; _xmlDoc = xmlRequest; _filter = filter; _multipartMimeRequestHelper = multipartMimeRequestHelper; //select the encoding _encoding = new UTF8Encoding(false, false); try { _encoding = StringHelper.GetEncoding(encoding, _encoding); } catch (Exception ex) { Trace.Fail("Error while getting transport encoding: " + ex.ToString()); } }
public SimpleRequest(string method, HttpRequestFilter filter) { _method = method; _filter = filter; }
/// <summary> /// Retrieve the specified URI, using the given filter, with the supplied parameters (if any). /// The parameters parameter should be an even number of strings, where each odd element is /// a param name and each following even element is the corresponding param value. For example, /// to retrieve http://www.vox.com/atom?svc=post&id=100, you would say: /// /// Get("http://www.vox.com/atom", "svc", "post", "id", "100"); /// /// If a param value is null or empty string, that param will not be included in the final URL /// (i.e. the corresponding param name will also be dropped). /// </summary> public virtual XmlDocument Get(ref Uri uri, HttpRequestFilter filter, out WebHeaderCollection responseHeaders, params string[] parameters) { return SimpleRequest("GET", ref uri, filter, out responseHeaders, parameters); }
/// <summary> /// Performs a multipart MIME HTTP POST with the specified XML document as the request body and filename as the payload. /// </summary> public XmlDocument Post(ref Uri uri, HttpRequestFilter filter, string contentType, XmlDocument doc, string encoding, string filename, out WebHeaderCollection responseHeaders) { return(Send("POST", ref uri, null, filter, contentType, doc, encoding, filename, false, out responseHeaders)); }
public XmlDocument Get(ref Uri uri, HttpRequestFilter filter, params string[] parameters) { WebHeaderCollection responseHeaders; return(Get(ref uri, filter, out responseHeaders, parameters)); }
public SimpleRequest(string method, HttpRequestFilter filter) { _method = method; _filter = filter; }
protected virtual XmlDocument MultipartSend(string method, ref Uri uri, string etag, HttpRequestFilter filter, string contentType, XmlDocument doc, string encoding, string filename, bool ignoreResponse, out WebHeaderCollection responseHeaders) { throw new NotImplementedException(); }
public static Stream SafeDownloadFile(string fileUrl, out string responseUri, HttpRequestFilter filter) { responseUri = null; try { HttpWebResponse response = SafeSendRequest(fileUrl, filter); if (response != null) { responseUri = UrlHelper.SafeToAbsoluteUri(response.ResponseUri); return(response.GetResponseStream()); } else { return(null); } } catch (Exception ex) { Trace.WriteLine("Unable to download file \"" + fileUrl + "\" during Blog service detection: " + ex.ToString()); return(null); } }
public static string GetEtag(string uri, HttpRequestFilter requestFilter) { return(GetEtagImpl(uri, requestFilter, "HEAD", "GET")); }
private HttpWebResponse ExecuteHttpRequest(string requestUri, int timeoutMs, HttpRequestFilter filter) { return CreateBlogClient().SendAuthenticatedHttpRequest(requestUri, timeoutMs, filter); }
public virtual HttpWebResponse SendAuthenticatedHttpRequest(string requestUri, int timeoutMs, HttpRequestFilter filter) { return(BlogClientHelper.SendAuthenticatedHttpRequest(requestUri, filter, CreateCredentialsFilter(requestUri))); }
public HttpWebResponse SendAuthenticatedHttpRequest(string requestUri, int timeoutMs, HttpRequestFilter filter) { return(BlogClientHelper.SendAuthenticatedHttpRequest(requestUri, filter, CreateAuthorizationFilter())); }
/// <summary> /// Performs an HTTP POST with the specified XML document as the request body. /// </summary> public XmlDocument Post(ref Uri uri, HttpRequestFilter filter, string contentType, XmlDocument doc, string encoding) { WebHeaderCollection responseHeaders; return(Post(ref uri, filter, contentType, doc, encoding, out responseHeaders)); }
protected virtual XmlDocument MultipartSend(string method, ref Uri uri, string etag, HttpRequestFilter filter, string contentType, XmlDocument doc, string encoding, string filename, bool ignoreResponse, out WebHeaderCollection responseHeaders) { throw new NotImplementedException(); }
public HttpWebResponse SendAuthenticatedHttpRequest(string requestUri, int timeoutMs, HttpRequestFilter filter) { return(BlogClient.SendAuthenticatedHttpRequest(requestUri, timeoutMs, filter)); }
protected virtual XmlDocument Send(string method, ref Uri uri, string etag, HttpRequestFilter filter, string contentType, XmlDocument doc, string encoding, string filename, bool ignoreResponse, out WebHeaderCollection responseHeaders) { if (!String.IsNullOrEmpty(filename)) { return MultipartSend(method, ref uri, etag, filter, contentType, doc, encoding, filename, ignoreResponse, out responseHeaders); } string absUri = UrlHelper.SafeToAbsoluteUri(uri); Debug.WriteLine("XML Request to " + absUri + ":\r\n" + doc.InnerXml); SendFactory sf = new SendFactory(etag, method, filter, contentType, doc, encoding); HttpWebResponse response = RedirectHelper.GetResponse(absUri, new RedirectHelper.RequestFactory(sf.Create)); try { responseHeaders = response.Headers; uri = response.ResponseUri; if (ignoreResponse || response.StatusCode == HttpStatusCode.NoContent) { return null; } else { XmlDocument xmlDocResponse = ParseXmlResponse(response); return xmlDocResponse; } } finally { if (response != null) response.Close(); } }
/// <summary> /// Currently sends an UNAUTHENTICATED HTTP request. /// If a static site requires authentication, this may be implemented here later. /// </summary> /// <param name="requestUri"></param> /// <param name="timeoutMs"></param> /// <param name="filter"></param> /// <returns></returns> public HttpWebResponse SendAuthenticatedHttpRequest(string requestUri, int timeoutMs, HttpRequestFilter filter) => BlogClientHelper.SendAuthenticatedHttpRequest(requestUri, filter, (HttpWebRequest request) => {});
/// <summary> /// Performs an HTTP DELETE on the URL and contains no body, returns the body as an XmlDocument if there is one /// </summary> public virtual XmlDocument Delete(Uri uri, HttpRequestFilter filter, out WebHeaderCollection responseHeaders) { return(SimpleRequest("DELETE", ref uri, filter, out responseHeaders, new string[] { })); }
private HttpWebResponse ExecuteHttpRequest(string requestUri, int timeoutMs, HttpRequestFilter filter) { return(CreateBlogClient().SendAuthenticatedHttpRequest(requestUri, timeoutMs, filter)); }
public HttpWebResponse SendAuthenticatedHttpRequest(string requestUri, int timeoutMs, HttpRequestFilter filter) { return BlogClient.SendAuthenticatedHttpRequest(requestUri, timeoutMs, filter); }
public virtual HttpWebResponse SendAuthenticatedHttpRequest(string requestUri, int timeoutMs, HttpRequestFilter filter) { return BlogClientHelper.SendAuthenticatedHttpRequest(requestUri, filter, CreateCredentialsFilter(requestUri)); }
/// <summary> /// Performs an HTTP POST with the specified XML document as the request body. /// </summary> public XmlDocument Post(ref Uri uri, HttpRequestFilter filter, string contentType, XmlDocument doc, string encoding) { WebHeaderCollection responseHeaders; return Post(ref uri, filter, contentType, doc, encoding, out responseHeaders); }
/// <summary> /// Performs a multipart MIME HTTP POST with the specified XML document as the request body and filename as the payload. /// </summary> public XmlDocument Post(ref Uri uri, HttpRequestFilter filter, string contentType, XmlDocument doc, string encoding, string filename, out WebHeaderCollection responseHeaders) { return Send("POST", ref uri, null, filter, contentType, doc, encoding, filename, false, out responseHeaders); }
public AtomMediaUploader(XmlNamespaceManager nsMgr, HttpRequestFilter requestFilter, string collectionUri, IBlogClientOptions options) : this(nsMgr, requestFilter, collectionUri, options, new XmlRestRequestHelper()) { }