2016-08-24 6 views
1

Ich arbeitete an einem .NET-basierten Youtube-API-Client mit einigen einfachen Funktionen. Ich ging eine Service-Instanz wie folgt auf die Schaffung von:YouTube .NET API v3 Benutzerdefinierte HttpClient

youtubeService = new YouTubeService(new BaseClientService.Initializer() 
{ 
    ApiKey = "", 
    ApplicationName = "my_wonderful_client" 
}); 

aber ich brauche es auch in der Lage sein, Proxy zu verwenden, um eine Verbindung herzustellen, also ging ich auf wie:

if (useProxy) 
     { 
      Google.Apis.Http.ConfigurableHttpClient customClient = null; 

      string proxyUri = "http://proxy.proxy.com"; 
      NetworkCredential proxyCreds = new NetworkCredential(
       @"domain\user", 
       "pass123" 
      ); 
      WebProxy proxy = new WebProxy(proxyUri, 8080) 
      { 
       UseDefaultCredentials = false, 
       Credentials = proxyCreds, 
      }; 


      HttpClientHandler httpClientHandler = new HttpClientHandler() 
      { 
       Proxy = proxy, 
       PreAuthenticate = true, 
       UseDefaultCredentials = false, 
      }; 

      Google.Apis.Http.ConfigurableMessageHandler customHandler = new Google.Apis.Http.ConfigurableMessageHandler(httpClientHandler); 
      customClient = new Google.Apis.Http.ConfigurableHttpClient(customHandler); 
     } 

Nun, wie Ich benutze mein customClient, um die Verbindung zu initialisieren? Leider sind die Docs auf .NET API ziemlich knapp.

Vielen Dank.

+0

Abielita, danke für die Antwort. Leider bezieht sich die erste Methode auf eine ältere Version der API, während sich die zweite Lösung nicht wirklich stark von der rohen HTTP/JSON-Kommunikation mit der API unterscheidet, ohne dass eine Bibliothek verwendet werden muss. Ich glaube, in einem so ausgeklügelten Rahmen wie diesem muss es eine einfache Lösung geben. – noisefield

Antwort

0

Ich habe diese related SO question auf, wie Sie die API über einen Proxy-Server zu überprüfen. Hier ist der Beispielcode:

YouTubeRequest request = new YouTubeRequest(settings); 
GDataRequestFactory f = (GDataRequestFactory) request.Service.RequestFactory; 
IWebProxy iProxy = WebRequest.DefaultWebProxy; 
WebProxy myProxy = new WebProxy(iProxy.GetProxy(query.Uri)); 
// potentially, setup credentials on the proxy here 
myProxy.Credentials = CredentialsCache.DefaultCredentials; 
myProxy.UseDefaultCredentials = true; 
f.Proxy = myProxy; 

Dieses thread auch eine webrequest auf die URL und Karte das Ergebnis zurück zum VideoListResponse Objekt machen vorgeschlagen:

try 
{ 
    Uri api = new Uri(string.Format("https://www.googleapis.com/youtube/v3/videos?id={0}&key={1}&part=snippet,statistics", videoIds, AppSettings.Variables.YouTube_APIKey)); 
    WebRequest request = WebRequest.Create(api); 

    WebProxy proxy = new WebProxy(AppSettings.Variables.ProxyAddress, AppSettings.Variables.ProxyPort); 
    proxy.Credentials = new NetworkCredential(AppSettings.Variables.ProxyUsername, AppSettings.Variables.ProxyPassword, AppSettings.Variables.ProxyDomain); 
    request.Proxy = proxy; 

    using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) 
    { 
     using (StreamReader streamReader = new StreamReader(response.GetResponseStream())) 
     { 
      return JsonConvert.DeserializeObject<VideoListResponse>(streamReader.ReadToEnd()); 
     } 
    } 
} 
catch (Exception ex) 
{ 
    ErrorLog.LogError(ex, "Video entity processing error: "); 
} 

können Sie auch diese überprüfen Google documentation, wie man Verwenden Sie einen HTTP-Proxy mit der .NET-Client-Bibliothek.