From cc2c0843a069623160d459a1a764778501c248f3 Mon Sep 17 00:00:00 2001 From: Alexander Munch-Hansen Date: Thu, 25 Apr 2019 18:00:05 +0200 Subject: [PATCH] RestSharpy stuff --- AR-3/Assets/Plugins/RestSharp.dll | Bin 0 -> 179200 bytes AR-3/Assets/Plugins/RestSharp.xml | 3516 +++++++++++++++++++++++++++++ AR-3/Assets/python_test.cs | 173 +- 3 files changed, 3639 insertions(+), 50 deletions(-) create mode 100644 AR-3/Assets/Plugins/RestSharp.dll create mode 100644 AR-3/Assets/Plugins/RestSharp.xml diff --git a/AR-3/Assets/Plugins/RestSharp.dll b/AR-3/Assets/Plugins/RestSharp.dll new file mode 100644 index 0000000000000000000000000000000000000000..2f0861bd344faf99d2f3dab50c963f63926a8d34 GIT binary patch literal 179200 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
  • *$+g2JA*t@**&7%ET`6yJtE4_@`G;# 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 literal 0 HcmV?d00001 diff --git a/AR-3/Assets/Plugins/RestSharp.xml b/AR-3/Assets/Plugins/RestSharp.xml new file mode 100644 index 0000000..83f3f52 --- /dev/null +++ b/AR-3/Assets/Plugins/RestSharp.xml @@ -0,0 +1,3516 @@ + + + + RestSharp + + + +

    + JSON WEB TOKEN (JWT) Authenticator class. + https://tools.ietf.org/html/draft-ietf-oauth-json-web-token + + + + + Tries to Authenticate with the credentials of the currently logged in user, or impersonate a user + + + + + Authenticate with the credentials of the currently logged in user + + + + + Authenticate by impersonation + + + + + + + Authenticate by impersonation, using an existing ICredentials instance + + + + + + + + + Base class for OAuth 2 Authenticators. + + + Since there are many ways to authenticate in OAuth2, + this is used as a base class to differentiate between + other authenticators. + Any other OAuth2 authenticators must derive from this + abstract class. + + + + + Access token to be used when authenticating. + + + + + Initializes a new instance of the class. + + + The access token. + + + + + Gets the access token. + + + + + The OAuth 2 authenticator using URI query parameter. + + + Based on http://tools.ietf.org/html/draft-ietf-oauth-v2-10#section-5.1.2 + + + + + Initializes a new instance of the class. + + + The access token. + + + + + The OAuth 2 authenticator using the authorization request header field. + + + Based on http://tools.ietf.org/html/draft-ietf-oauth-v2-10#section-5.1.1 + + + + + Stores the Authorization header value as "[tokenType] accessToken". used for performance. + + + + + Initializes a new instance of the class. + + + The access token. + + + + + Initializes a new instance of the class. + + + The access token. + + + The token type. + + + + + All text parameters are UTF-8 encoded (per section 5.1). + + + + + The set of characters that are unreserved in RFC 2396 but are NOT unreserved in RFC 3986. + + + + + Generates a random 16-byte lowercase alphanumeric string. + + + + + + Generates a timestamp based on the current elapsed seconds since '01/01/1970 0000 GMT" + + + + + + Generates a timestamp based on the elapsed seconds of a given time since '01/01/1970 0000 GMT" + + A specified point in time. + + + + + URL encodes a string based on section 5.1 of the OAuth spec. + Namely, percent encoding with [RFC3986], avoiding unreserved characters, + upper-casing hexadecimal characters, and UTF-8 encoding for text value pairs. + + The value to escape. + The escaped value. + + The method is supposed to take on + RFC 3986 behavior if certain elements are present in a .config file. Even if this + actually worked (which in my experiments it doesn't), we can't rely on every + host actually having this configuration element present. + + + + + URL encodes a string based on section 5.1 of the OAuth spec. + Namely, percent encoding with [RFC3986], avoiding unreserved characters, + upper-casing hexadecimal characters, and UTF-8 encoding for text value pairs. + + + + + + Sorts a collection of key-value pairs by name, and then value if equal, + concatenating them into a single string. This string should be encoded + prior to, or after normalization is run. + + + + + + + Sorts a by name, and then value if equal. + + A collection of parameters to sort + A sorted parameter collection + + + + Creates a request URL suitable for making OAuth requests. + Resulting URLs must exclude port 80 or port 443 when accompanied by HTTP and HTTPS, respectively. + Resulting URLs must be lower case. + + The original request URL + + + + + Creates a request elements concatenation value to send with a request. + This is also known as the signature base. + + The request HTTP method type + The request URL + The request parameters + A signature base string + + + + Creates a signature value given a signature base and the consumer secret. + This method is used when the token secret is currently unknown. + + The hashing method + The signature base + The consumer key + + + + + Creates a signature value given a signature base and the consumer secret. + This method is used when the token secret is currently unknown. + + The hashing method + The treatment to use on a signature value + The signature base + The consumer key + + + + + Creates a signature value given a signature base and the consumer secret and a known token secret. + + The hashing method + The signature base + The consumer secret + The token secret + + + + + Creates a signature value given a signature base and the consumer secret and a known token secret. + + The hashing method + The treatment to use on a signature value + The signature base + The consumer secret + The token secret + + + + + A class to encapsulate OAuth authentication flow. + + + + + Generates a instance to pass to an + for the purpose of requesting an + unauthorized request token. + + The HTTP method for the intended request + + + + + Generates a instance to pass to an + for the purpose of requesting an + unauthorized request token. + + The HTTP method for the intended request + Any existing, non-OAuth query parameters desired in the request + + + + + Generates a instance to pass to an + for the purpose of exchanging a request token + for an access token authorized by the user at the Service Provider site. + + The HTTP method for the intended request + + + + Generates a instance to pass to an + for the purpose of exchanging a request token + for an access token authorized by the user at the Service Provider site. + + The HTTP method for the intended request + Any existing, non-OAuth query parameters desired in the request + + + + Generates a instance to pass to an + for the purpose of exchanging user credentials + for an access token authorized by the user at the Service Provider site. + + The HTTP method for the intended request + Any existing, non-OAuth query parameters desired in the request + + + + Types of parameters that can be added to requests + + + + + Data formats + + + + + HTTP method to use when making requests + + + + + Format strings for commonly-used date formats + + + + + .NET format string for ISO 8601 date format + + + + + .NET format string for roundtrip date format + + + + + Status for responses (surprised?) + + + + + Extension method overload! + + + + + Save a byte array to a file + + Bytes to save + Full path to save file to + + + + Read a stream into a byte array + + Stream to read + byte[] + + + + Copies bytes from one stream to another + + The input stream. + The output stream. + + + + Converts a byte array to a string, using its byte order mark to convert it to the right encoding. + http://www.shrinkrays.net/code-snippets/csharp/an-extension-method-for-converting-a-byte-array-to-a-string.aspx + + An array of bytes to convert + Content encoding. Will fallback to UTF8 if not a valid encoding. + The byte as a string. + + + + Converts a byte array to a string, using its byte order mark to convert it to the right encoding. + http://www.shrinkrays.net/code-snippets/csharp/an-extension-method-for-converting-a-byte-array-to-a-string.aspx + + An array of bytes to convert + The byte as a string using UTF8. + + + + Reflection extensions + + + + + Retrieve an attribute from a member (property) + + Type of attribute to retrieve + Member to retrieve attribute from + + + + + Retrieve an attribute from a type + + Type of attribute to retrieve + Type to retrieve attribute from + + + + + Checks a type to see if it derives from a raw generic (e.g. List[[]]) + + + + + + + + Find a value from a System.Enum by trying several possible variants + of the string value of the enum. + + Type of enum + Value for which to search + The culture used to calculate the name variants + + + + + Convert a to a instance. + + The response status. + + responseStatus + + + + Imports the specified XML String into the crypto service provider + + + .NET Core 2.0 doesn't provide an implementation of RSACryptoServiceProvider.FromXmlString/ToXmlString, so we have to do it ourselves. + Source: https://gist.github.com/Jargon64/5b172c452827e15b21882f1d76a94be4/ + + + + + Uses Uri.EscapeDataString() based on recommendations on MSDN + http://blogs.msdn.com/b/yangxind/archive/2006/11/09/don-t-use-net-system-uri-unescapedatastring-in-url-decoding.aspx + + + + + Check that a string is not null or empty + + String to check + bool + + + + Remove underscores from a string + + String to process + string + + + + Parses most common JSON date formats + + JSON value to parse + + DateTime + + + + Remove leading and trailing " from a string + + String to parse + String + + + + Converts a string to pascal case + + String to convert + + string + + + + Converts a string to pascal case with the option to remove underscores + + String to convert + Option to remove underscores + + + + + + Converts a string to camel case + + String to convert + + String + + + + Convert the first letter of a string to lower case + + String to convert + string + + + + Checks to see if a string is all uppper case + + String to check + bool + + + + Add underscores to a pascal-cased string + + String to convert + string + + + + Add dashes to a pascal-cased string + + String to convert + string + + + + Add an undescore prefix to a pascasl-cased string + + + + + + + Add spaces to a pascal-cased string + + String to convert + string + + + + Return possible variants of a name for name matching. + + String to convert + The culture to use for conversion + IEnumerable<string> + + + + XML Extension Methods + + + + + Returns the name of an element with the namespace if specified + + Element name + XML Namespace + + + + + Container for files to be uploaded with requests + + + + + Creates a file parameter from an array of bytes. + + The parameter name to use in the request. + The data to use as the file's contents. + The filename to use in the request. + The content type to use in the request. + The + + + + Creates a file parameter from an array of bytes. + + The parameter name to use in the request. + The data to use as the file's contents. + The filename to use in the request. + The using the default content type. + + + + Creates a file parameter from an array of bytes. + + The parameter name to use in the request. + Delegate that will be called with the request stream so you can write to it.. + The length of the data that will be written by te writer. + The filename to use in the request. + Optional: parameter content type + The using the default content type. + + + + The length of data to be sent + + + + + Provides raw data for file + + + + + Name of the file to use when uploading + + + + + MIME content type of file + + + + + Name of the parameter + + + + + HttpWebRequest wrapper (async methods) + + + HttpWebRequest wrapper + + + HttpWebRequest wrapper (sync methods) + + + + + Execute an async POST-style request with the specified HTTP Method. + + + The HTTP method to execute. + + + + + Execute an async GET-style request with the specified HTTP Method. + + + The HTTP method to execute. + + + + + Default constructor + + + + + True if this HTTP request has any HTTP parameters + + + + + True if this HTTP request has any HTTP cookies + + + + + True if a request body has been specified + + + + + True if files have been set to be uploaded + + + + + Enable or disable automatic gzip/deflate decompression + + + + + Always send a multipart/form-data request - even when no Files are present. + + + + + UserAgent to be sent with request + + + + + Timeout in milliseconds to be used for the request + + + + + The number of milliseconds before the writing or reading times out. + + + + + System.Net.ICredentials to be sent with request + + + + + The System.Net.CookieContainer to be used for the request + + + + + The delegate to use to write the response instead of reading into RawBytes + Here you can also check the request details + + + + + The delegate to use to write the response instead of reading into RawBytes + + + + + Collection of files to be sent with request + + + + + Whether or not HTTP 3xx response redirects should be automatically followed + + + + + Whether or not to use pipelined connections + + + + + X509CertificateCollection to be sent with request + + + + + Maximum number of automatic redirects to follow if FollowRedirects is true + + + + + Determine whether or not the "default credentials" (e.g. the user account under which the current process is + running) /// will be sent along to the server. + + + + + The ConnectionGroupName property enables you to associate a request with a connection group. + + + + + Encoding for the request, UTF8 is the default + + + + + HTTP headers to be sent with request + + + + + HTTP parameters (QueryString or Form values) to be sent with request + + + + + HTTP cookies to be sent with request + + + + + Request body to be sent with request + + + + + Content type of the request body. + + + + + An alternative to RequestBody, for when the caller already has the byte array. + + + + + URL to call for this request + + + + + Explicit Host header value to use in requests independent from the request URI. + If null, default host value extracted from URI is used. + + + + + List of Allowed Decompression Methods + + + + + Flag to send authorisation header with the HttpWebRequest + + + + + Flag to reuse same connection in the HttpWebRequest + + + + + Proxy info to be sent with request + + + + + Caching policy for requests created with this wrapper. + + + + + Callback function for handling the validation of remote certificates. + + + + + Creates an IHttp + + + + + + Execute a POST request + + + + + Execute a PUT request + + + + + Execute a GET request + + + + + Execute a HEAD request + + + + + Execute an OPTIONS request + + + + + Execute a DELETE request + + + + + Execute a PATCH request + + + + + Execute a MERGE request + + + + + Execute a GET-style request with the specified HTTP Method. + + The HTTP method to execute. + + + + + Execute a POST-style request with the specified HTTP Method. + + The HTTP method to execute. + + + + + Representation of an HTTP cookie + + + + + Comment of the cookie + + + + + Comment of the cookie + + + + + Indicates whether the cookie should be discarded at the end of the session + + + + + Domain of the cookie + + + + + Indicates whether the cookie is expired + + + + + Date and time that the cookie expires + + + + + Indicates that this cookie should only be accessed by the server + + + + + Name of the cookie + + + + + Path of the cookie + + + + + Port of the cookie + + + + + Indicates that the cookie should only be sent over secure channels + + + + + Date and time the cookie was created + + + + + Value of the cookie + + + + + Version of the cookie + + + + + Container for HTTP file + + + + + The length of data to be sent + + + + + Provides raw data for file + + + + + Name of the file to use when uploading + + + + + MIME content type of file + + + + + Name of the parameter + + + + + Representation of an HTTP header + + + + + Name of the header + + + + + Value of the header + + + + + Representation of an HTTP parameter (QueryString or Form value) + + + + + Name of the parameter + + + + + Value of the parameter + + + + + Content-Type of the parameter + + + + + HTTP response data + + + + + Default constructor + + + + + MIME content type of response + + + + + Length in bytes of the response content + + + + + Encoding of the response content + + + + + Lazy-loaded string representation of response content + + + + + HTTP response status code + + + + + Description of HTTP status returned + + + + + Response content + + + + + The URL that actually responded to the content (different from request if redirected) + + + + + HttpWebResponse.Server + + + + + Headers returned by server with the response + + + + + Cookies returned by server with the response + + + + + Status of the request. Will return Error for transport errors. + HTTP errors will still return ResponseStatus.Completed, check StatusCode instead + + + + + Transport or other non-HTTP error generated while attempting request + + + + + Exception thrown when error is encountered. + + + + + The HTTP protocol version (1.0, 1.1, etc) + + Only set when underlying framework supports it. + + + + Enable or disable automatic gzip/deflate decompression + + + + + Always send a multipart/form-data request - even when no Files are present. + + + + + An alternative to RequestBody, for when the caller already has the byte array. + + + + + HTTP response data + + + + + MIME content type of response + + + + + Length in bytes of the response content + + + + + Encoding of the response content + + + + + String representation of response content + + + + + HTTP response status code + + + + + Description of HTTP status returned + + + + + Response content + + + + + The URL that actually responded to the content (different from request if redirected) + + + + + HttpWebResponse.Server + + + + + Headers returned by server with the response + + + + + Cookies returned by server with the response + + + + + Status of the request. Will return Error for transport errors. + HTTP errors will still return ResponseStatus.Completed, check StatusCode instead + + + + + Transport or other non-HTTP error generated while attempting request + + + + + Exception thrown when error is encountered. + + + + + The HTTP protocol version (1.0, 1.1, etc) + + Only set when underlying framework supports it. + + + + Allows to use a custom way to encode URL parameters + + A delegate to encode URL parameters + client.UseUrlEncoder(s => HttpUtility.UrlEncode(s)); + + + + + Allows to use a custom way to encode query parameters + + A delegate to encode query parameters + client.UseUrlEncoder((s, encoding) => HttpUtility.UrlEncode(s, encoding)); + + + + + X509CertificateCollection to be sent with request + + + + + Callback function for handling the validation of remote certificates. Useful for certificate pinning and + overriding certificate errors in the scope of a request. + + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + The HTTP method to execute + + + + Executes a POST-style request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + The HTTP method to execute + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + The HTTP method to execute + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + The HTTP method to execute + + + + Add a delegate to apply custom configuration to HttpWebRequest before making a call + + Configuration delegate for HttpWebRequest + + + + Adds or replaces a deserializer for the specified content type + + Content type for which the deserializer will be replaced + Custom deserializer + + + + Adds or replaces a deserializer for the specified content type + + Content type for which the deserializer will be replaced + Custom deserializer factory + + + + Removes custom deserialzier for the specified content type + + Content type for which deserializer needs to be removed + + + + Remove deserializers for all content types + + + + + Executes the request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + The cancellation token + + + + Executes the request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Override the request method + + + + Executes the request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + + + + Executes a GET-style request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + + + + Executes a GET-style request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + The cancellation token + + + + Executes a POST-style request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + + + + Executes a POST-style request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + The cancellation token + + + + Executes the request and callback asynchronously, authenticating if needed + + Request to be executed + The cancellation token + + + + Executes the request and callback asynchronously, authenticating if needed + + Request to be executed + The cancellation token + Override the request method + + + + Executes the request asynchronously, authenticating if needed + + Request to be executed + + + + Executes a GET-style asynchronously, authenticating if needed + + Request to be executed + + + + Executes a GET-style asynchronously, authenticating if needed + + Request to be executed + The cancellation token + + + + Executes a POST-style asynchronously, authenticating if needed + + Request to be executed + + + + Executes a POST-style asynchronously, authenticating if needed + + Request to be executed + The cancellation token + + + + Always send a multipart/form-data request - even when no Files are present. + + + + + Serializer to use when writing JSON request bodies. Used if RequestFormat is Json. + By default the included JsonSerializer is used (currently using SimpleJson default serialization). + + + + + Serializer to use when writing XML request bodies. Used if RequestFormat is Xml. + By default the included XmlSerializer is used. + + + + + Set this to handle the response stream yourself, based on the response details + + + + + Set this to write response to Stream rather than reading into memory. + + + + + Container of all HTTP parameters to be passed with the request. + See AddParameter() for explanation of the types of parameters that can be passed + + + + + Container of all the files to be uploaded with the request. + + + + + Determines what HTTP method to use for this request. Supported methods: GET, POST, PUT, DELETE, HEAD, OPTIONS + Default is GET + + + + + The Resource URL to make the request against. + Tokens are substituted with UrlSegment parameters and match by name. + Should not include the scheme or domain. Do not include leading slash. + Combined with RestClient.BaseUrl to assemble final URL: + {BaseUrl}/{Resource} (BaseUrl is scheme + domain, e.g. http://example.com) + + + // example for url token replacement + request.Resource = "Products/{ProductId}"; + request.AddParameter("ProductId", 123, ParameterType.UrlSegment); + + + + + Serializer to use when writing XML request bodies. Used if RequestFormat is Xml. + By default XmlSerializer is used. + + + + + Used by the default deserializers to determine where to start deserializing from. + Can be used to skip container or root elements that do not have corresponding deserialzation targets. + + + + + Used by the default deserializers to explicitly set which date format string to use when parsing dates. + + + + + Used by XmlDeserializer. If not specified, XmlDeserializer will flatten response by removing namespaces from element names. + + + + + In general you would not need to set this directly. Used by the NtlmAuthenticator. + + + + + Timeout in milliseconds to be used for the request. This timeout value overrides a timeout set on the RestClient. + + + + + The number of milliseconds before the writing or reading times out. This timeout value overrides a timeout set on the RestClient. + + + + + How many attempts were made to send this Request? + + + This Number is incremented each time the RestClient sends the request. + Useful when using Asynchronous Execution with Callbacks + + + + + Determine whether or not the "default credentials" (e.g. the user account under which the current process is running) + will be sent along to the server. The default is false. + + + + + List of Allowed Decompression Methods + + + + + Adds a file to the Files collection to be included with a POST or PUT request + (other methods do not support file uploads). + + The parameter name to use in the request + Full path to file to upload + The MIME type of the file to upload + This request + + + + Adds the bytes to the Files collection with the specified file name and content type + + The parameter name to use in the request + The file data + The file name to use for the uploaded file + The MIME type of the file to upload + This request + + + + Adds the bytes to the Files collection with the specified file name and content type + + The parameter name to use in the request + A function that writes directly to the stream. Should NOT close the stream. + The file name to use for the uploaded file + The length (in bytes) of the file content. + The MIME type of the file to upload + This request + + + + Add bytes to the Files collection as if it was a file of specific type + + A form parameter name + The file data + The file name to use for the uploaded file + Specific content type. Es: application/x-gzip + + + + + Serializes obj to format specified by RequestFormat, but passes xmlNamespace if using the default XmlSerializer + The default format is XML. Change RequestFormat if you wish to use a different serialization format. + + The object to serialize + The XML namespace to use when serializing + This request + + + + Serializes obj to data format specified by RequestFormat and adds it to the request body. + The default format is XML. Change RequestFormat if you wish to use a different serialization format. + + The object to serialize + This request + + + + Serializes obj to JSON format and adds it to the request body. + + The object to serialize + This request + + + + Serializes obj to XML format and adds it to the request body. + + The object to serialize + This request + + + + Serializes obj to format specified by RequestFormat, but passes xmlNamespace if using the default XmlSerializer + Serializes obj to XML format and passes xmlNamespace then adds it to the request body. + + The object to serialize + The XML namespace to use when serializing + This request + + + + Calls AddParameter() for all public, readable properties specified in the includedProperties list + + + request.AddObject(product, "ProductId", "Price", ...); + + The object with properties to add as parameters + The names of the properties to include + This request + + + + Calls AddParameter() for all public, readable properties of obj + + The object with properties to add as parameters + This request + + + + Add the parameter to the request + + Parameter to add + + + + + Adds a HTTP parameter to the request (QueryString for GET, DELETE, OPTIONS and HEAD; Encoded form for POST and PUT) + + Name of the parameter + Value of the parameter + This request + + + + Adds a parameter to the request. There are five types of parameters: + - GetOrPost: Either a QueryString value or encoded form value based on method + - HttpHeader: Adds the name/value pair to the HTTP request's Headers collection + - UrlSegment: Inserted into URL if there is a matching url token e.g. {AccountId} + - Cookie: Adds the name/value pair to the HTTP request's Cookies collection + - RequestBody: Used by AddBody() (not recommended to use directly) + + Name of the parameter + Value of the parameter + The type of parameter to add + This request + + + + Adds a parameter to the request. There are five types of parameters: + - GetOrPost: Either a QueryString value or encoded form value based on method + - HttpHeader: Adds the name/value pair to the HTTP request's Headers collection + - UrlSegment: Inserted into URL if there is a matching url token e.g. {AccountId} + - Cookie: Adds the name/value pair to the HTTP request's Cookies collection + - RequestBody: Used by AddBody() (not recommended to use directly) + + Name of the parameter + Value of the parameter + Content-Type of the parameter + The type of parameter to add + This request + + + + Add or update the parameter to the request + + Parameter to add + + + + + Adds a HTTP parameter to the request (QueryString for GET, DELETE, OPTIONS and HEAD; Encoded form for POST and PUT) + + Name of the parameter + Value of the parameter + This request + + + + Adds a parameter to the request. There are five types of parameters: + - GetOrPost: Either a QueryString value or encoded form value based on method + - HttpHeader: Adds the name/value pair to the HTTP request's Headers collection + - UrlSegment: Inserted into URL if there is a matching url token e.g. {AccountId} + - Cookie: Adds the name/value pair to the HTTP request's Cookies collection + - RequestBody: Used by AddBody() (not recommended to use directly) + + Name of the parameter + Value of the parameter + The type of parameter to add + This request + + + + Adds a parameter to the request. There are five types of parameters: + - GetOrPost: Either a QueryString value or encoded form value based on method + - HttpHeader: Adds the name/value pair to the HTTP request's Headers collection + - UrlSegment: Inserted into URL if there is a matching url token e.g. {AccountId} + - Cookie: Adds the name/value pair to the HTTP request's Cookies collection + - RequestBody: Used by AddBody() (not recommended to use directly) + + Name of the parameter + Value of the parameter + Content-Type of the parameter + The type of parameter to add + This request + + + + Shortcut to AddParameter(name, value, HttpHeader) overload + + Name of the header to add + Value of the header to add + + + + + Shortcut to AddParameter(name, value, Cookie) overload + + Name of the cookie to add + Value of the cookie to add + + + + + Shortcut to AddParameter(name, value, UrlSegment) overload + + Name of the segment to add + Value of the segment to add + + + + + Shortcut to AddParameter(name, value, QueryString) overload + + Name of the parameter to add + Value of the parameter to add + + + + + Shortcut to AddParameter(name, value, QueryString) overload + + Name of the parameter to add + Value of the parameter to add + Whether parameter should be encoded or not + + + + + Container for data sent back from API + + + + + The RestRequest that was made to get this RestResponse + + + Mainly for debugging if ResponseStatus is not OK + + + + + MIME content type of response + + + + + Length in bytes of the response content + + + + + Encoding of the response content + + + + + String representation of response content + + + + + HTTP response status code + + + + + Whether or not the response status code indicates success + + + + + Description of HTTP status returned + + + + + Response content + + + + + The URL that actually responded to the content (different from request if redirected) + + + + + HttpWebResponse.Server + + + + + Cookies returned by server with the response + + + + + Headers returned by server with the response + + + + + Status of the request. Will return Error for transport errors. + HTTP errors will still return ResponseStatus.Completed, check StatusCode instead + + + + + Transport or other non-HTTP error generated while attempting request + + + + + Exceptions thrown during the request, if any. + + Will contain only network transport or framework exceptions thrown during the request. + HTTP protocol errors are handled by RestSharp and will not appear here. + + + + The HTTP protocol version (1.0, 1.1, etc) + + Only set when underlying framework supports it. + + + + Container for data sent back from API including deserialized data + + Type of data to deserialize to + + + + Deserialized entity data + + + + + Parameter container for REST requests + + + + + Name of the parameter + + + + + Value of the parameter + + + + + Type of the parameter + + + + + Body parameter data type + + + + + MIME content type of the parameter + + + + + Return a human-readable representation of this parameter + + String + + + + Client to translate RestRequests into Http requests and process response result + + + + + Executes the request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + HTTP call method (GET, PUT, etc) + + + + Executes the request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + The HTTP method to execute + + + + Executes a POST-style request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + The HTTP method to execute + + + + Executes the request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + Override the request http method + + + + Executes the request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + The HTTP method to execute + + + + Executes a POST-style request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + The HTTP method to execute + + + + Executes a GET-style request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + + + + Executes a GET-style request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + The cancellation token + + + + Executes a POST-style request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + + + + Executes a POST-style request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + The cancellation token + + + + Executes the request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Override the request method + + + + Executes the request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + + + + Executes the request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + The cancellation token + Override the request method + + + + Executes the request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + The cancellation token + + + + Executes the request asynchronously, authenticating if needed + + Request to be executed + + + + Executes a GET-style asynchronously, authenticating if needed + + Request to be executed + + + + Executes a GET-style asynchronously, authenticating if needed + + Request to be executed + The cancellation token + + + + Executes a POST-style asynchronously, authenticating if needed + + Request to be executed + + + + Executes a POST-style asynchronously, authenticating if needed + + Request to be executed + The cancellation token + + + + Executes the request asynchronously, authenticating if needed + + Request to be executed + The cancellation token + Override the request method + + + + Executes the request asynchronously, authenticating if needed + + Request to be executed + The cancellation token + + + + Default constructor that registers default content handlers + + + + + + Sets the BaseUrl property for requests made by this client instance + + + + + + + Sets the BaseUrl property for requests made by this client instance + + + + + + Replace the default serializer with a custom one + + The custom serializer instance + + + + + Replace the default serializer with a custom one + + A function that creates a custom serializer instance + + + + + Replace the default serializer with a custom one + + The type that implements IRestSerializer + + + + + Allows to use a custom way to encode parameters + + A delegate to encode parameters + client.UseUrlEncoder(s => HttpUtility.UrlEncode(s)); + + + + + Enable or disable automatic gzip/deflate decompression + + + + + Maximum number of redirects to follow if FollowRedirects is true + + + + + X509CertificateCollection to be sent with request + + + + + Proxy to use for requests made by this client instance. + Passed on to underlying WebRequest if set. + + + + + The cache policy to use for requests initiated by this client instance. + + + + + Default is true. Determine whether or not requests that result in + HTTP status codes of 3xx should follow returned redirect + + + + + The CookieContainer used for requests made by this client instance + + + + + UserAgent to use for requests made by this client instance + + + + + Timeout in milliseconds to use for requests made by this client instance. + If not set, the default timeout for HttpWebRequest is used. + + + + + The number of milliseconds before the writing or reading times out. + + + + + Whether to invoke async callbacks using the SynchronizationContext.Current captured when invoked + + + + + Authenticator to use for requests made by this client instance + + + + + Combined with Request.Resource to construct URL for request + Should include scheme and domain without trailing slash. + + + client.BaseUrl = new Uri("http://example.com"); + + + + + Set to false if you want to get ResponseStatus.Completed when deserialization fails. + Default is true. + + + + + Allow high-speed NTLM-authenticated connection sharing + + + + + The ConnectionGroupName property enables you to associate a request with a connection group. + + + + + Callback function for handling the validation of remote certificates. Useful for certificate pinning and + overriding certificate errors in the scope of a request. + + + + + Parameters included with every request made with this instance of RestClient + If specified in both client and request, the request wins + + + + + Explicit Host header value to use in requests independent from the request URI. + If null, default host value extracted from URI is used. + + + + + Set to true if you need to add multiple default parameters with the same name. + Only query and form parameters are supported. + + + + + Registers a content handler to process response content + + MIME content type of the response content + Deserializer to use to process content + + + + Registers a content handler to process response content + + MIME content type of the response content + Deserializer to use to process content + + + + Registers a content handler to process response content + + A list of MIME content types of the response content + Deserializer factory to use to process content + + + + Registers a content handler to process response content + + A list of MIME content types of the response content + Deserializer to use to process content + + + + Remove a content handler for the specified MIME content type + + MIME content type to remove + + + + Remove all content handlers + + + + + Assembles URL to call based on parameters, method and resource + + RestRequest to execute + Assembled System.Uri + + + + Executes the specified request and downloads the response data + + Request to execute + Response data + + + + Executes the specified request and downloads the response data + + Request to execute + Throw an exception if download fails. + Response data + + + + Executes the request and returns a response, authenticating if needed + + Request to be executed + Override the http method in the request + RestResponse + + + + Executes the request and returns a response, authenticating if needed + + Request to be executed + RestResponse + + + + Executes the specified request and deserializes the response content using the appropriate content handler + + Target deserialization type + Request to execute + RestResponse[[T]] with deserialized data in Data property + + + + Executes the request and callback asynchronously, authenticating if needed + + The IRestClient this method extends + Request to be executed + Callback function to be executed upon completion + + + + Executes the request and callback asynchronously, authenticating if needed + + The IRestClient this method extends + Target deserialization type + Request to be executed + Callback function to be executed upon completion providing access to the async handle + + + + Execute the request using GET HTTP method. Exception will be thrown if the request does not succeed. + + RestClient instance + The request + Expected result type + + + + + Execute the request using POST HTTP method. Exception will be thrown if the request does not succeed. + + RestClient instance + The request + Expected result type + + + + + Execute the request using PUT HTTP method. Exception will be thrown if the request does not succeed. + + RestClient instance + The request + Expected result type + + + + + Execute the request using HEAD HTTP method. Exception will be thrown if the request does not succeed. + + RestClient instance + The request + Expected result type + + + + + Execute the request using OPTIONS HTTP method. Exception will be thrown if the request does not succeed. + + RestClient instance + The request + Expected result type + + + + + Execute the request using PATCH HTTP method. Exception will be thrown if the request does not succeed. + + RestClient instance + The request + Expected result type + + + + + Execute the request using DELETE HTTP method. Exception will be thrown if the request does not succeed. + + RestClient instance + The request + Expected result type + + + + + Add a parameter to use on every request made with this client instance + + The IRestClient instance + Parameter to add + + + + + Removes a parameter from the default parameters that are used on every request made with this client instance + + The IRestClient instance + The name of the parameter that needs to be removed + + + + + Adds a default HTTP parameter (QueryString for GET, DELETE, OPTIONS and HEAD; Encoded form for POST and PUT) + Used on every request made by this client instance + + The IRestClient instance + Name of the parameter + Value of the parameter + This request + + + + Adds a default parameter to the request. There are four types of parameters: + - GetOrPost: Either a QueryString value or encoded form value based on method + - HttpHeader: Adds the name/value pair to the HTTP request's Headers collection + - UrlSegment: Inserted into URL if there is a matching url token e.g. {AccountId} + - RequestBody: Used by AddBody() (not recommended to use directly) + Used on every request made by this client instance + + The IRestClient instance + Name of the parameter + Value of the parameter + The type of parameter to add + This request + + + + Adds a default header to the RestClient. Used on every request made by this client instance. + + The IRestClient instance + Name of the header to add + Value of the header to add + + + + + Adds a default URL segment parameter to the RestClient. Used on every request made by this client instance. + + The IRestClient instance + Name of the segment to add + Value of the segment to add + + + + + Adds a default URL query parameter to the RestClient. Used on every request made by this client instance. + + The IRestClient instance + Name of the query parameter to add + Value of the query parameter to add + + + + + Container for data used to make requests + + + + + Local list of Allowed Decompression Methods + + + + + Default constructor + + + + + Sets Method property to value of method + + Method to use for this request + + + + Gets or sets a user-defined state object that contains information about a request and which can be later + retrieved when the request completes. + + + + + List of Allowed Decompresison Methods + + + + + Always send a multipart/form-data request - even when no Files are present. + + + + + Serializer to use when writing JSON request bodies. Used if RequestFormat is Json. + By default the included JsonSerializer is used (currently using JSON.NET default serialization). + + + + + Serializer to use when writing XML request bodies. Used if RequestFormat is Xml. + By default the included XmlSerializer is used. + + + + + Set this to write response to Stream rather than reading into memory. + + + + + Set this to handle the response stream yourself, based on the response details + + + + + Determine whether or not the "default credentials" (e.g. the user account under which the current process is + running) + will be sent along to the server. The default is false. + + + + + Adds a file to the Files collection to be included with a POST or PUT request + (other methods do not support file uploads). + + The parameter name to use in the request + Full path to file to upload + The MIME type of the file to upload + This request + + + + Adds the bytes to the Files collection with the specified file name + + The parameter name to use in the request + The file data + The file name to use for the uploaded file + The MIME type of the file to upload + This request + + + + Adds the bytes to the Files collection with the specified file name and content type + + The parameter name to use in the request + A function that writes directly to the stream. Should NOT close the stream. + The file name to use for the uploaded file + The length (in bytes) of the file content. + The MIME type of the file to upload + This request + + + + Add bytes to the Files collection as if it was a file of specific type + + A form parameter name + The file data + The file name to use for the uploaded file + Specific content type. Es: application/x-gzip + + + + + Serializes obj to format specified by RequestFormat, but passes xmlNamespace if using the default XmlSerializer + The default format is XML. Change RequestFormat if you wish to use a different serialization format. + + The object to serialize + The XML namespace to use when serializing + This request + + + + Serializes obj to data format specified by RequestFormat and adds it to the request body. + The default format is XML. Change RequestFormat if you wish to use a different serialization format. + + The object to serialize + This request + + + + Serializes obj to JSON format and adds it to the request body. + + The object to serialize + This request + + + + Serializes obj to XML format and adds it to the request body. + + The object to serialize + This request + + + + Serializes obj to XML format and passes xmlNamespace then adds it to the request body. + + The object to serialize + The XML namespace to use when serializing + This request + + + + Calls AddParameter() for all public, readable properties specified in the includedProperties list + + + request.AddObject(product, "ProductId", "Price", ...); + + The object with properties to add as parameters + The names of the properties to include + This request + + + + Calls AddParameter() for all public, readable properties of obj + + The object with properties to add as parameters + This request + + + + Add the parameter to the request + + Parameter to add + + + + + Adds a HTTP parameter to the request (QueryString for GET, DELETE, OPTIONS and HEAD; Encoded form for POST and PUT) + + Name of the parameter + Value of the parameter + This request + + + + Adds a parameter to the request. There are four types of parameters: + - GetOrPost: Either a QueryString value or encoded form value based on method + - HttpHeader: Adds the name/value pair to the HTTP request's Headers collection + - UrlSegment: Inserted into URL if there is a matching url token e.g. {AccountId} + - RequestBody: Used by AddBody() (not recommended to use directly) + + Name of the parameter + Value of the parameter + The type of parameter to add + This request + + + + Adds a parameter to the request. There are four types of parameters: + - GetOrPost: Either a QueryString value or encoded form value based on method + - HttpHeader: Adds the name/value pair to the HTTP request's Headers collection + - UrlSegment: Inserted into URL if there is a matching url token e.g. {AccountId} + - RequestBody: Used by AddBody() (not recommended to use directly) + + Name of the parameter + Value of the parameter + Content-Type of the parameter + The type of parameter to add + This request + + + + Adds a parameter to the request or updates it with the given argument, if the parameter already exists in the + request + + Parameter to add + + + + + Adds a HTTP parameter to the request or updates it with the given argument, if the parameter already exists in the + request + (QueryString for GET, DELETE, OPTIONS and HEAD; Encoded form for POST and PUT) + + Name of the parameter + Value of the parameter + This request + + + + + Adds a HTTP parameter to the request or updates it with the given argument, if the parameter already exists in the + request + - GetOrPost: Either a QueryString value or encoded form value based on method + - HttpHeader: Adds the name/value pair to the HTTP request's Headers collection + - UrlSegment: Inserted into URL if there is a matching url token e.g. {AccountId} + - RequestBody: Used by AddBody() (not recommended to use directly) + + Name of the parameter + Value of the parameter + The type of parameter to add + This request + + + + Adds a HTTP parameter to the request or updates it with the given argument, if the parameter already exists in the + request + - GetOrPost: Either a QueryString value or encoded form value based on method + - HttpHeader: Adds the name/value pair to the HTTP request's Headers collection + - UrlSegment: Inserted into URL if there is a matching url token e.g. {AccountId} + - RequestBody: Used by AddBody() (not recommended to use directly) + + Name of the parameter + Value of the parameter + Content-Type of the parameter + The type of parameter to add + This request + + + + + Shortcut to AddParameter(name, value, HttpHeader) overload + + Name of the header to add + Value of the header to add + + + + + + Shortcut to AddParameter(name, value, Cookie) overload + + Name of the cookie to add + Value of the cookie to add + + + + + Shortcut to AddParameter(name, value, UrlSegment) overload + + Name of the segment to add + Value of the segment to add + + + + + Shortcut to AddParameter(name, value, QueryString) overload + + Name of the parameter to add + Value of the parameter to add + + + + + Shortcut to AddParameter(name, value, QueryString) overload + + Name of the parameter to add + Value of the parameter to add + Whether parameter should be encoded or not + + + + + Add a Decompression Method to the request + + None | GZip | Deflate + + + + + Container of all HTTP parameters to be passed with the request. + See AddParameter() for explanation of the types of parameters that can be passed + + + + + Container of all the files to be uploaded with the request. + + + + + Determines what HTTP method to use for this request. Supported methods: GET, POST, PUT, DELETE, HEAD, OPTIONS + Default is GET + + + + + The Resource URL to make the request against. + Tokens are substituted with UrlSegment parameters and match by name. + Should not include the scheme or domain. Do not include leading slash. + Combined with RestClient.BaseUrl to assemble final URL: + {BaseUrl}/{Resource} (BaseUrl is scheme + domain, e.g. http://example.com) + + + // example for url token replacement + request.Resource = "Products/{ProductId}"; + request.AddParameter("ProductId", 123, ParameterType.UrlSegment); + + + + + Determines how to serialize the request body. + By default Xml is used. + + + + + Used by the default deserializers to determine where to start deserializing from. + Can be used to skip container or root elements that do not have corresponding deserialzation targets. + + + + + A function to run prior to deserializing starting (e.g. change settings if error encountered) + + + + + Used by the default deserializers to explicitly set which date format string to use when parsing dates. + + + + + Used by XmlDeserializer. If not specified, XmlDeserializer will flatten response by removing namespaces from + element names. + + + + + In general you would not need to set this directly. Used by the NtlmAuthenticator. + + + + + Timeout in milliseconds to be used for the request. This timeout value overrides a timeout set on the RestClient. + + + + + The number of milliseconds before the writing or reading times out. This timeout value overrides a timeout set on + the RestClient. + + + + + Internal Method so that RestClient can increase the number of attempts + + + + + How many attempts were made to send this Request? + + + This Number is incremented each time the RestClient sends the request. + Useful when using Asynchronous Execution with Callbacks + + + + + Shortcut to AddParameter(name, value, UrlSegment) overload + + Name of the segment to add + Value of the segment to add + + + + + Base class for common properties shared by RestResponse and RestResponse[[T]] + + + + + Default constructor + + + + + The RestRequest that was made to get this RestResponse + + + Mainly for debugging if ResponseStatus is not OK + + + + + MIME content type of response + + + + + Length in bytes of the response content + + + + + Encoding of the response content + + + + + String representation of response content + + + + + HTTP response status code + + + + + Whether or not the response status code indicates success + + + + + Description of HTTP status returned + + + + + Response content + + + + + The URL that actually responded to the content (different from request if redirected) + + + + + HttpWebResponse.Server + + + + + Cookies returned by server with the response + + + + + Headers returned by server with the response + + + + + Status of the request. Will return Error for transport errors. + HTTP errors will still return ResponseStatus.Completed, check StatusCode instead + + + + + Transport or other non-HTTP error generated while attempting request + + + + + The exception thrown during the request, if any + + + + + The HTTP protocol version (1.0, 1.1, etc) + + Only set when underlying framework supports it. + + + + Assists with debugging responses by displaying in the debugger output + + + + + + Container for data sent back from API including deserialized data + + Type of data to deserialize to + + + + Deserialized entity data + + + + + Container for data sent back from API + + + + + Comment of the cookie + + + + + Comment of the cookie + + + + + Indicates whether the cookie should be discarded at the end of the session + + + + + Domain of the cookie + + + + + Indicates whether the cookie is expired + + + + + Date and time that the cookie expires + + + + + Indicates that this cookie should only be accessed by the server + + + + + Name of the cookie + + + + + Path of the cookie + + + + + Port of the cookie + + + + + Indicates that the cookie should only be sent over secure channels + + + + + Date and time the cookie was created + + + + + Value of the cookie + + + + + Version of the cookie + + + + + Serialize the object as JSON + If the object is already a serialized string returns it's value + + Object to serialize + JSON as String + + + + Determines if the object is already a serialized string. + + + + + Content type for serialized content + + + + + Name of the root element to use when serializing + + + + + XML namespace to use when serializing + + + + + Format string to use when serializing dates + + + + + Allows control how class and property names and values are deserialized by XmlAttributeDeserializer + + + + + The name to use for the serialized element + + + + + Sets if the property to Deserialize is an Attribute or Element (Default: false) + + + + + Sets if the property to Deserialize is a content of current Element (Default: false) + + + + + Wrapper for System.Xml.Serialization.XmlSerializer. + + + + + Name of the root element to use when serializing + + + + + XML namespace to use when serializing + + + + + Encoding for serialized content + + + + + Allows control how class and property names and values are serialized by XmlSerializer + Currently not supported with the JsonSerializer + When specified at the property level the class-level specification is overridden + + + + + The name to use for the serialized element + + + + + Sets the value to be serialized as an Attribute instead of an Element + + + + + Sets the value to be serialized as text content of current Element instead of an new Element + + + + + The culture to use when serializing + + + + + Transforms the casing of the name based on the selected value. + + + + + The order to serialize the element. Default is int.MaxValue. + + + + + Called by the attribute when NameStyle is speficied + + The string to transform + String + + + + Options for transforming casing of element names + + + + + Wrapper for System.Xml.Serialization.XmlSerializer. + + + + + Default constructor, does not specify namespace + + + + + + Specify the namespaced to be used when serializing + + XML namespace + + + + Encoding for serialized content + + + + + Serialize the object as XML + + Object to serialize + XML as string + + + + Name of the root element to use when serializing + + + + + XML namespace to use when serializing + + + + + Format string to use when serializing dates + + + + + Content type for serialized content + + + + + Default XML Serializer + + + + + Default constructor, does not specify namespace + + + + + Specify the namespaced to be used when serializing + + XML namespace + + + + Serialize the object as XML + + Object to serialize + XML as string + + + + Name of the root element to use when serializing + + + + + XML namespace to use when serializing + + + + + Format string to use when serializing dates + + + + + Content type for serialized content + + + + + Determines if a given object is numeric in any way + (can be integer, double, null, etc). + + + + + Represents the json array. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + The capacity of the json array. + + + + The json representation of the array. + + The json representation of the array. + + + + Represents the json object. + + + + + The internal member dictionary. + + + + + Initializes a new instance of . + + + + + Initializes a new instance of . + + The implementation to use when comparing keys, or null to use the default for the type of the key. + + + + Gets the at the specified index. + + + + + + Adds the specified key. + + The key. + The value. + + + + Determines whether the specified key contains key. + + The key. + + true if the specified key contains key; otherwise, false. + + + + + Gets the keys. + + The keys. + + + + Removes the specified key. + + The key. + + + + + Tries the get value. + + The key. + The value. + + + + + Gets the values. + + The values. + + + + Gets or sets the with the specified key. + + + + + + Adds the specified item. + + The item. + + + + Clears this instance. + + + + + Determines whether [contains] [the specified item]. + + The item. + + true if [contains] [the specified item]; otherwise, false. + + + + + Copies to. + + The array. + Index of the array. + + + + Gets the count. + + The count. + + + + Gets a value indicating whether this instance is read only. + + + true if this instance is read only; otherwise, false. + + + + + Removes the specified item. + + The item. + + + + + Gets the enumerator. + + + + + + Returns an enumerator that iterates through a collection. + + + An object that can be used to iterate through the collection. + + + + + Returns a json that represents the current . + + + A json that represents the current . + + + + + This class encodes and decodes JSON strings. + Spec. details, see http://www.json.org/ + + JSON uses Arrays and Objects. These correspond here to the datatypes JsonArray(IList<object>) and JsonObject(IDictionary<string,object>). + All numbers are parsed to doubles. + + + + + Parses the string json into a value + + A JSON string. + An IList<object>, a IDictionary<string,object>, a double, a string, null, true, or false + + + + Try parsing the json string into a value. + + + A JSON string. + + + The object. + + + Returns true if successfull otherwise false. + + + + + Converts a IDictionary<string,object> / IList<object> object into a JSON string + + A IDictionary<string,object> / IList<object> + Serializer strategy to use + A JSON encoded string, or null if object 'json' is not serializable + + + + Determines if a given object is numeric in any way + (can be integer, double, null, etc). + + + + + Helper methods for validating required values + + + + + Require a parameter to not be null + + Name of the parameter + Value of the parameter + + + + Helper methods for validating values + + + + + Validate an integer value is between the specified values (exclusive of min/max) + + Value to validate + Exclusive minimum value + Exclusive maximum value + + + + Validate a string length + + String to be validated + Maximum length of the string + + + diff --git a/AR-3/Assets/python_test.cs b/AR-3/Assets/python_test.cs index 3b27970..eab69e9 100644 --- a/AR-3/Assets/python_test.cs +++ b/AR-3/Assets/python_test.cs @@ -6,10 +6,12 @@ using OpenCVForUnity.CoreModule; using UnityEngine; using Vuforia; using Newtonsoft.Json; +using RestSharp; using OpenCVForUnity.Calib3dModule; using OpenCVForUnity.ImgprocModule; using OpenCVForUnity.ImgcodecsModule; - +using System.Collections; + public class HomographyAndState { public List> homography { get; set; } @@ -28,28 +30,29 @@ public class python_test : MonoBehaviour double rueX = 0.51; double rueY = 0.71; - Mat camImgCopy; + Mat camImgCopy; + WebCamTexture _webcamtex; + Mat camMatFromTexture; + + Process process; + ProcessStartInfo start = new ProcessStartInfo(); + Texture2D _TextureFromCamera; + + RestClient restClient; + + int viewMarked = 0; + //StreamWriter sw; + //StreamReader sr; // Start is called before the first frame update void Start() { - loadedImage = Imgcodecs.imread("/Users/alexandermunch-hansen/projects/chess_stuff/advancedskrald/whole_boards/boards_for_empty/board_1554285984.187497_rank_4.png"); - camImgCopy = loadedImage.clone(); - - - } - - - string runCmd(Mat image) - { - var buffer = new MatOfByte(); - OpenCVForUnity.ImgcodecsModule.Imgcodecs.imencode(".png", camImageMat, buffer); - string base64 = Convert.ToBase64String(buffer.toArray()); - - ProcessStartInfo start = new ProcessStartInfo(); + //loadedImage = Imgcodecs.imread("/Users/alexandermunch-hansen/projects/chess_stuff/advancedskrald/whole_boards/boards_for_empty/board_1554285984.187497_rank_4.png"); + //camImgCopy = loadedImage.clone(); + start.FileName = "/Users/alexandermunch-hansen/.virtualenvs/cv/bin/python3"; var cmd = "/Users/alexandermunch-hansen/projects/chess_stuff/advancedskrald/adapter.py"; var args = ""; @@ -59,57 +62,121 @@ public class python_test : MonoBehaviour start.CreateNoWindow = true; // We don't need new window start.RedirectStandardInput = true; start.RedirectStandardOutput = true;// Any output, generated by application will be redirected back - start.RedirectStandardError = true; // Any error in standard output will be redirected back (for example exceptions) - using (Process process = Process.Start(start)) - { - + start.RedirectStandardError = true; // Any error in standard output will be redirected back (for example exceptions) + + + camMatFromTexture = new Mat(1080, 1920, CvType.CV_8UC3); + _TextureFromCamera = new Texture2D(1920, 1080); + + restClient = new RestClient("http://localhost:5000"); - using (StreamWriter writer = process.StandardInput) - { - writer.WriteLine(base64); - writer.Close(); - } - process.WaitForExit(); + //process = Process.Start(start); + //sw = new StreamWriter(process.StandardInput.BaseStream, System.Text.Encoding.Default, 1024, true); + //sr = new StreamReader(process.StandardOutput.BaseStream, System.Text.Encoding.Default, true, 1024, true); + + _webcamtex = new WebCamTexture(WebCamTexture.devices[0].name, 1920, 1080); + _webcamtex.Play(); - using (StreamReader reader = process.StandardOutput) - { - string result = reader.ReadLine(); - - return (string) result; - } - } + + } + + + string runCmd(Mat image) + { + var buffer = new MatOfByte(); + OpenCVForUnity.ImgcodecsModule.Imgcodecs.imencode(".png", image, buffer); + string base64 = Convert.ToBase64String(buffer.toArray()); + + String json = $"{{\"img\": \"{base64}\"}}"; + + RestRequest request = new RestRequest(Method.POST); + + request.RequestFormat = DataFormat.Json; + + request.AddParameter("application/json", json, ParameterType.RequestBody); + var response = restClient.Execute(request); + + return response.Content; + } + + /* + using (StreamWriter writer = process.StandardInput) + { + writer.WriteLine(base64); + } + + + using (StreamReader reader = process.StandardOutput) + { + string result = reader.ReadLine(); + return (string)result; + + }*/ + + + // Update is called once per frame void Update() { - Image camImg = CameraDevice.Instance.GetCameraImage(Image.PIXEL_FORMAT.RGBA8888); - Mat outputMat = null; + Image camImg = CameraDevice.Instance.GetCameraImage(Image.PIXEL_FORMAT.RGBA8888); + + Mat textMat = null; + if (camImg != null) - { + { + _TextureFromCamera.SetPixels(_webcamtex.GetPixels()); + _TextureFromCamera.Apply(); + //byte[] bytes = _TextureFromCamera.EncodeToPNG(); + //string filePath = "SavedScreen1.png"; + //File.WriteAllBytes(filePath, bytes); + OpenCVForUnity.UnityUtils.Utils.texture2DToMat(_TextureFromCamera, camMatFromTexture); + + + + /* if (camImageMat == null) { camImageMat = new Mat(camImg.Height, camImg.Width, CvType.CV_8UC4); } camImageMat.put(0, 0, camImg.Pixels); - if (Input.GetKeyDown("space")) + */ + + + if (Input.GetKeyDown(KeyCode.A)) { + print("fuck"); + viewMarked = 0; + } else if (Input.GetKeyDown(KeyCode.S)) + { + print("cock"); + viewMarked = 1; + } + + + if (Input.GetKeyDown("space")) + { + //ScreenCapture.CaptureScreenshot("plspls.png"); + + loadedImage = camMatFromTexture.clone(); // TODO: We should clone camImageMat again, instead of the loadedImage I use now - /* - var camImgCopy = camImageMat.clone(); - outputMat = camImageMat.clone(); - */ + + //loadedImage = camImageMat.clone(); + //camImgCopy = camImageMat.clone(); print("------------------------------------"); - print(loadedImage.size()); + //print(loadedImage.size()); camImageMat = loadedImage.clone(); print("------------------------------------"); - var pls = runCmd(camImageMat); + + var pls = runCmd(camMatFromTexture); + Mat homography = new Mat(new Size(3, 3), CvType.CV_64F); @@ -117,14 +184,12 @@ public class python_test : MonoBehaviour HomographyAndState homographyAndState = JsonConvert.DeserializeObject(pls); - print(homographyAndState.homography); for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { homography.put(i, j, homographyAndState.homography[i][j]); - print(homographyAndState.homography[i][j]); } } @@ -138,12 +203,12 @@ public class python_test : MonoBehaviour for (int x = 1; x < 9; x++) { var cur_pos = board[x - 1][y - 1]; + points.put(indexer, 0, (cur_pos != 6 ? 1 : -200) * y * 165, (cur_pos != 6 ? 1 : -200) * x * 165); indexer += 1; } } - MatOfPoint2f dstPoints = new MatOfPoint2f(); Core.perspectiveTransform(points, dstPoints, homography.inv()); @@ -155,13 +220,21 @@ public class python_test : MonoBehaviour Imgproc.circle(loadedImage, point, 10, new Scalar(255, 0, 0), -1); } - MatDisplay.DisplayMat(loadedImage, MatDisplaySettings.FULL_BACKGROUND); - displayWarped = true; + // MatDisplay.DisplayMat(loadedImage, MatDisplaySettings.FULL_BACKGROUND); + + //process.Close(); + //process = Process.Start(start); } - if (!displayWarped) - MatDisplay.DisplayMat(camImgCopy, MatDisplaySettings.FULL_BACKGROUND); + if (viewMarked == 0) + { + MatDisplay.DisplayMat(camMatFromTexture, MatDisplaySettings.FULL_BACKGROUND); + + } else if (viewMarked == 1) + { + MatDisplay.DisplayMat(loadedImage, MatDisplaySettings.FULL_BACKGROUND); + } }