所以我在如何以C#格式发送以下JSON数据方面遇到了很多麻烦。我确切地知道如何在 cURL 中做到这一点,但我一辈子都无法弄清楚这一点。这个要求对我正在做的事情至关重要,我真的需要完成它。这是 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请求非常陌生,因此任何帮助将不胜感激。
我想通了!
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 数据(字符串格式)。根据您使用的节拍,这对于数据可视化来说可能非常酷。
以下是我如何使用 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 类默认为 GET,因此如果您想使用 GET,您只需为 WWW 类提供:
WWW www = new WWW(url + "?" + jsonString);
并跳过我的方法的前 2 行。
在这里,我们使用 IEnumerator 来yield return www:
等待请求完成,直到继续。要使用 IEnumerator 方法,您可以使用异步运行的StartCoroutine(SendSomething());
调用它。