我正在尝试创建一个需要从API获取Json的(C#.net 4.5 winforms)应用程序。 我一直在尝试和谷歌搜索2天,没有运气!
注意:我不想使用Async! 注意:它不必是WebClient。
所有我必须继续的是这个记录的cURL请求:
curl -k -d "username=<USERNAME>@<AUTHTYPE>&password=<PASS>" https://<URL>:<PORT>/api/json/access/ticket
{ "data": {
"CSRFPreventionToken":"4EEC61E2:lwk7od06fa1+DcPUwBTXCcndyAY",
"ticket":"User:4EEC61E2::rsKoApxDTLYPn6H3NNT6iP2mv...",
"username":"<USERNAME>"}
}
我正在尝试使用WebClient来获取Json响应,但我一直得到:
Exception: "The remote server returned an error: (401) Unauthorized"
这是我的初始代码:
string result = "";
var conn = "https://" + server.Hostname + ":" + server.Port + "/api2/json";
var query = conn + "/access/ticket";
var json = "";
try
{
// Accept Self-Signed SSL Certificate
ServicePointManager.ServerCertificateValidationCallback += (sender, cert, chain, sslPolicyErrors) => true;
// Get Json
using (WebClient client = new WebClient())
{
json = client.DownloadString(query);
result = json;
}
}
catch (Exception e)
{
var BrPoint = e.ToString();
}
return result;
现在我需要发送带有该请求的身份验证(就像在curl中一样)但是如何?
当我有票时,我需要制作一张包含票据的cookie来发送下一个请求。
非常感谢任何帮助!
答案 0 :(得分:1)
它看起来像是因为你使用DownloadString()方法调用而不是使用UploadString()方法调用的POST请求来执行Get请求。
尝试将其更改为UploadString()并将以下内容作为数据参数传递:
username=<USERNAME>@<AUTHTYPE>&password=<PASS>