0

У меня есть следующий фрагмент кода, чтобы сделать звонок внабор прокси для Google.Apis.YouTube.v3

YouTubeService service = new YouTubeService(new BaseClientService.Initializer() 
{ 
    ApiKey = AppSettings.Variables.YouTube_APIKey, 
    ApplicationName = AppSettings.Variables.YouTube_AppName 
}); 

Google.Apis.YouTube.v3.VideosResource.ListRequest request = service.Videos.List("snippet,statistics"); 
request.Id = string.Join(",", videoIDs); 
VideoListResponse response = request.Execute(); 

Это все работает, но при развертывании его в нашем реальном сервере, он должен получить через прокси-сервер таким образом, мы должны поместить следующий код в web.config:

<defaultProxy useDefaultCredentials="false" enabled="true"> 
     <proxy usesystemdefault="False" proxyaddress="http://192.111.111.102:8081" /> 
    </defaultProxy> 

Однако, это, кажется, не работает, как, когда вызов сделан, я получаю следующую ошибку:

System.Net.Sockets.SocketException: No connection could be made because the target machine actively refused it 216.58.213.74:443

Есть ли способ вручную установить прокси в коде?

Что-то вдоль линий:

WebProxy proxy = new WebProxy("192.111.111.102", 8081); 
proxy.Credentials = new NetworkCredential(AppSettings.Variables.ProxyUser, AppSettings.Variables.ProxyPassword, AppSettings.Variables.ProxyDomain); 

// apply this to the service or request object here 
+0

Проверьте это [SO вопрос] (http://stackoverflow.com/questions/2374187/how-to-upload-to-youtube-using-the-api-via-a-proxy-server), если он может вам помочь. – KENdi

+0

@KENdi, я видел этот ответ, к сожалению, запрос видео-списка не позволяет вам присоединить прокси-сервер, например YouTubeRequest, в ответ – Pete

ответ

1

Чтобы обойти эту проблему, я должен был сделать WebRequest в URL и сопоставить результат обратно VideoListResponse объекта:

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: "); 
}