2016-01-21 15 views
1
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是不好的請求和長字符C#400錯誤的請求和長字符如何API重要

我怎樣才能得到它由psk和公司ID進行身份驗證?

現在使用RESTAPI並獲得與我的AUTOIT SCRIPT類似的結果的工作代碼是空令牌和過期令牌。 LOgmein服務器的問題,不報告:`使用系統;

using 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(); 




     } 

    } 
} ` 
+1

API的文檔頁面在哪裏?我無法在網上找到它。我只能找到這個:https://secure.logmein.com/ws/api/alertEventGetList.aspx?help = 1。你在標題中發送它們,但是在上面的鏈接中,值出現在查詢字符串中。你嘗試過嗎?另外,爲什麼你不使用HttpClient? – jpgrassi

+0

謝謝jpprassi。他們有兩個API。你寫的那個對我來說很好。我正在使用的是這個來獲取硬件庫存/軟件庫存。 pdf文件是這個https://secure.logmein.com/welcome/documentation/EN/pdf/LogMeInCentralPublicAPIReference.pdf。請讓我知道你的想法。我已經使用了autoit,它似乎給我過期空標記null。我想c#。我還沒有專家在C#中,但只是想知道這是否可以解決我的問題 – great77

回答

1

因爲我沒有實際登錄到API的參數,我不能肯定地說這會工作。但它確實實現在文檔中規定的所有要求你referenced

我正在使用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值的授權標頭。這不是授權的「默認」方法。因此,您需要使用TryAddWithoutValidation跳過驗證並在請求頭中添加json。

如果這仍然不起作用,您可能需要使用另一個http客戶端發出請求。我見過使用RestSharp的用戶可以成功登錄到此API。看到類似的信息question

+0

謝謝jpgrassi。它給錯誤。如何包含httpclient,如果它有幫助,我試圖使用這個替代方案。 api的文檔鏈接https://secure.logmein.com/ws/api/alertEventGetDetails.aspx?help=1 – great77

+0

謝謝jpgrassi。它給錯誤。如何包含httpclient,如果它有幫助,我試圖使用這個替代方案。在此鏈接中的API文檔https://secure.logmein.com/ws/api/alertEventGetDetails.aspx?help=1。我只是把它作爲響應,我怎麼在頁面的這一部分寫入intlist。代碼我有sURL =「https://secure.logmein.com/ws/api/alertEventGetDetails.aspx?companyid=1xxxxxx&psk=xxxxxxx&alerteventidlist=1,2,3,10,12」。我想也許有辦法做到這一點,這是唯一一個我 – great77

+0

我已經更新了我的答案,包括引用HttpClient,看到那裏。這是你正在談論的一個新的API。我的回答是針對您在問題(報告)中發佈的問題,該問題使用完全不同的身份驗證流程。你真的在使用哪一個? – jpgrassi