2016-11-06 82 views
1

使用响应标头调用REST API内容编码gzip与RestSharp导致问题。如果我使用Visual Studio将代码作为简单的ConsoleApplication执行,则没有问题,因此只有Unity无法处理此问题。任何有想法的人?unity3d - System.DllNotFoundException:使用内容编码调用REST API时的MonoPosixHelper gzip

 var client = new RestClient("http://rest.sandbox-immobilienscout24.de"); 
    var request = new RestRequest("/restapi/api/search/v1.0/search/region", Method.GET); 
    client.ClearHandlers(); 
    request.AddQueryParameter("realestatetype", realestatetype); 
    request.AddQueryParameter("geocodes", geocodes); 
    request.AddHeader("Accept", "application/json"); 
    request.AddHeader("Systemauthorization", "blabla"); 
    IRestResponse response = client.Execute(request); 
    Debug.Log("search:" +response.ErrorException); 

响应头:

Cache-Control →private 
Content-Encoding →gzip 
Content-Type →application/json;charset=UTF-8 
Date →Sun, 06 Nov 2016 14:21:03 GMT 
Expires →Thu, 01 Jan 1970 01:00:00 CET 
L-IS24-ApiClient →blaKey 
L-IS24-RequestRefnum →06be3d11-6526-4664-acd1-0787dbd7d1f6 
Server →Apache 
Transfer-Encoding →chunked 
Vary →Accept-Encoding 

例外:

search:System.Net.WebException: MonoPosixHelper ---> System.DllNotFoundException: MonoPosixHelper 
    at (wrapper managed-to-native) System.IO.Compression.DeflateStream:CreateZStream (System.IO.Compression.CompressionMode,bool,System.IO.Compression.DeflateStream/UnmanagedReadOrWrite,intptr) 
    at System.IO.Compression.DeflateStream..ctor (System.IO.Stream compressedStream, CompressionMode mode, Boolean leaveOpen, Boolean gzip) [0x00000] in <filename unknown>:0 
    at (wrapper remoting-invoke-with-check) System.IO.Compression.DeflateStream:.ctor (System.IO.Stream,System.IO.Compression.CompressionMode,bool,bool) 
    at System.IO.Compression.GZipStream..ctor (System.IO.Stream compressedStream, CompressionMode mode, Boolean leaveOpen) [0x00000] in <filename unknown>:0 
    at System.IO.Compression.GZipStream..ctor (System.IO.Stream compressedStream, CompressionMode mode) [0x00000] in <filename unknown>:0 
    at (wrapper remoting-invoke-with-check) System.IO.Compression.GZipStream:.ctor (System.IO.Stream,System.IO.Compression.CompressionMode) 
    at System.Net.HttpWebResponse..ctor (System.Uri uri, System.String method, System.Net.WebConnectionData data, System.Net.CookieContainer container) [0x00000] in <filename unknown>:0 
    at (wrapper remoting-invoke-with-check) System.Net.HttpWebResponse:.ctor (System.Uri,string,System.Net.WebConnectionData,System.Net.CookieContainer) 
    at System.Net.HttpWebRequest.SetResponseData (System.Net.WebConnectionData data) [0x00000] in <filename unknown>:0 
    --- End of inner exception stack trace --- 
    at System.Net.HttpWebRequest.EndGetResponse (IAsyncResult asyncResult) [0x00000] in <filename unknown>:0 
    at System.Net.HttpWebRequest.GetResponse() [0x00000] in <filename unknown>:0 
    at RestSharp.Http.GetRawResponse (System.Net.HttpWebRequest request) [0x00000] in <filename unknown>:0 
UnityEngine.Debug:Log(Object) 
ApiClient:callSearchApi(String, String) (at Assets/ApiClient.cs:33) 
ApiClient:Start() (at Assets/ApiClient.cs:12) 

回答

0

您有几个选择与网站互动。包括

  1. WWW

的WWW类可用于发送GET和POST请求到服务器 。如果您提供 postData参数,WWW类将默认使用GET并POST。

  • UnityWebRequest
  • 的UnityWebRequest为统一的原WWW对象的替代品。 它提供了一个模块化系统,用于撰写HTTP请求和处理HTTP响应。 UnityWebRequest系统的主要目标是让 允许Unity游戏与现代Web后端进行交互。它也 支持高要求的功能,如分块的HTTP请求,流式传输 POST/PUT操作和完全控制HTTP头和动词。

    +0

    这些解决方案都不支持Restsharp那样的Rest API。 – Trojaner

    +1

    所以用restSharp回答这个问题。 https://github.com/Cratesmith/RestSharp-for-unity3d –

    相关问题