2
using System;
using System.Net;
using System.IO;

namespace MakeAGETRequest_charp
{
    /// <summary>
    /// Summary description for Class1.
    /// </summary>
    public class Class1
    {
         static void Main(string[] args)
       {
           string sURL;


           sURL = "https://secure.logmein.com/public-api/v1/inventory/hardware/reports";

            WebRequest wrGETURL;
            wrGETURL = WebRequest.Create(sURL);
            wrGETURL.UseDefaultCredentials = true;

            wrGETURL.PreAuthenticate = true;
            wrGETURL.Credentials = CredentialCache.DefaultCredentials;
            wrGETURL.ContentType = "application/json";

             //wrGETURL.Headers.Add("Company Id:", "xxxxxxxxx");
           // wrGETURL.Headers.Add("PSK:", "0x_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");
            wrGETURL.Headers[HttpRequestHeader.Authorization] = "companyId":"114xxxxxx", "psk":" 0x_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";




            WebProxy myProxy = new WebProxy("myproxy", 80);
            myProxy.BypassProxyOnLocal = true;

           // wrGETURL.Proxy = WebProxy.GetDefaultProxy();  // obsolete not needed

            Stream objStream;
            objStream = wrGETURL.GetResponse().GetResponseStream();

            StreamReader objReader = new StreamReader(objStream);

            string sLine = "";
            int i = 0;

            while (sLine != null)
            {
                i++;
                sLine = objReader.ReadLine();
                if (sLine != null)
                    Console.WriteLine("{0}:{1}", i, sLine);
            }
            Console.ReadLine();
        }
    }
}

我正在尝试从 Logmein 网站提取一份报告,并根据他们的文档,我确实需要首先帮助解决这个问题以获取硬件清单....错误是 400 bad request and long characters

如何通过 psk 和公司 ID 对其进行身份验证?

现在使用 RESTAPI 并使用我的 AUTOit SCRIPT 获得类似结果的工作代码是空令牌和过期令牌。LOGmein 服务器的问题,没有给出报告:`using System;

使用 System.Net;使用 System.IO;使用 System.Net.Http;使用 RestSharp;

namespace MakeAGETRequest_charp { /// /// Class1 的摘要描述。/// 公共类 ConsoleApplication3 {

    static void Main(string[] args)

    {

        var ade = new RestClient("https://secure.logmein.com/");
        var request = new RestRequest("public-api/v1/inventory/system/reports", Method.GET);
  request.AddHeader("authorization", "{\"companyId\":113,\"psk\":\"00_loqxkwbz8w0xxxxxxx\"}");
    request.AddHeader("accept", "application/Json; charset=utf-8");
   IRestResponse response = ade.Execute(request);


        //string sURL;


   var result = "";


       result = response.Content;
       Console.Write(result);
       Console.Read()


   //Console.WriteLine(ade.Execute(request));
           // Console.Read();




        }

    }
} `
4

1 回答 1

2

由于我没有实际登录 API 的参数,我不能肯定这会起作用。但它确实实现了您引用的文档中指定的所有要求

我正在使用位于程序集内部的HttpClient类来执行此示例System.Net.Http

using(var client = new HttpClient())
{
    //Base Url
    client.BaseAddress = new Uri("http://secure.logmein.com/public-api/v1/");

    //Add mandatory Request Headers General parameters Section of doc               
    client.DefaultRequestHeaders.Accept.Clear();
    client.DefaultRequestHeaders.TryAddWithoutValidation("Content-Type", "application/json");
    client.DefaultRequestHeaders.Add("Accept", "application/json; charset=utf-8");

    //Authentication header. 
    string auth = "{\"companyId\":123456,\"psk\":\"ABCZSWDED\"}";
    client.DefaultRequestHeaders.TryAddWithoutValidation("Authorization:", auth);

    HttpResponseMessage response = client.GetAsync("inventory/hardware/reports").Result;
}

唯一的问题是 API 需要一个带有 JSON 值的 Authorization 标头。这不是授权的“默认”方法。因此,您需要使用TryAddWithoutValidation跳过验证并在请求标头中添加 json。

如果这仍然不起作用,您可能需要使用另一个 http 客户端来发出请求。我见过有人使用RestSharp成功登录到这个 API。看到这个类似的问题

于 2016-01-21T12:39:28.127 回答