所以我在如何以C#格式发送以下JSON数据方面遇到了很多麻烦。我确切知道如何在cURL中做到这一点,但我不能为我的生活弄清楚这一点。这个要求对我正在做的事情至关重要,我真的需要完成它。这是卷曲声明:
curl <ip of server>/<index>/_search?pretty=true -d '
{
"query": {
"match_all": {}
},
"size": 1,
"sort": [{
"_timestamp": {
"order": "desc"
}
}]
}
如果它有帮助我正在向Elasticsearch服务器发出请求,而我正在抓取JSON数据。这个cURL请求完全符合我的要求。这是我现在拥有的C#代码,但我不确定如何将此JSON数据添加到GET请求中。这也将在Unity游戏引擎中运行。
// Create a request for the URL.
request = WebRequest.Create(elk_url);
// If required by the server, set the credentials.
request.Credentials = CredentialCache.DefaultCredentials;
// Get the response.
response = (HttpWebResponse)request.GetResponse();
// Display the status.
Debug.Log(response.StatusDescription);
// Get the stream containing content returned by the server.
dataStream = response.GetResponseStream();
// Open the stream using a StreamReader for easy access.
reader = new StreamReader(dataStream);
// Read the content.
string responseFromServer = reader.ReadToEnd();
// Display the content.
Debug.Log(responseFromServer);
// Cleanup the streams and the response.
reader.Close();
dataStream.Close();
response.Close();
以上内容仅来自文档页面,我对代码中的HTTP请求不熟悉,因此非常感谢任何帮助。
答案 0 :(得分:2)
我明白了!
WebRequest request = WebRequest.Create(elk_url);
request.ContentType = "application/json";
request.Method = "POST";
byte[] buffer = Encoding.GetEncoding("UTF-8").GetBytes(queryString);
string result = System.Convert.ToBase64String(buffer);
Stream reqstr = request.GetRequestStream();
reqstr.Write(buffer, 0, buffer.Length);
reqstr.Close();
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Debug.Log(response.StatusDescription);
dataStream = response.GetResponseStream();
// Open the stream using a StreamReader for easy access.
reader = new StreamReader(dataStream);
// Read the content.
string responseFromServer = reader.ReadToEnd();
// Display the content.
Debug.Log(responseFromServer);
// Cleanup the streams and the response.
reader.Close();
dataStream.Close();
response.Close();
查询字符串是原始帖子中的JSON数据。对于那些想要了解ELK堆栈的人来说,这将为您提供最新事件的JSON数据(字符串格式)。根据您使用的节拍,这对于数据可视化来说可能非常酷。
答案 1 :(得分:0)
以下是我如何使用POST发送Unity WWW - 请求:
public IEnumerator SendSomething()
{
WWWForm wwwForm = new WWWForm();
wwwForm.AddField("Parameter_Name", jsonString);
WWW www = new WWW(url, wwwForm);
yield return www;
if (www.error == null)
{
Debug.Log("Everything worked!");
}
else
{
Debug.Log("Something went wrong: " + www.error);
}
}
如果你不提供postData参数(我的wwwForm),WWW-class默认为GET,所以如果你想使用GET,你可以为WWW-class提供:
WWW www = new WWW(url + "?" + jsonString);
并跳过我方法的前两行。
这里我们将IEnumerator用于yield return www:
等待请求完成,直到继续。要使用IEnumerator方法,可以使用StartCoroutine(SendSomething());
调用它,它将运行asyncronized。