2012-10-30 30 views
2

我有一个使用youtube-api上传视频的Java代码。到目前为止,我正在使用系统配置来设置代理(http和https),并且一切工作都很好。但是现在我对我们在服务器上使用代理的方式有了一个新的要求。由于我们在同一台服务器上运行其他服务,他们要求我不要使用全系统方法配置代理,因为这会影响使用JVM的所有服务。使用代理,每个连接而不是系统上传Youtube

System.setProperty("http.proxyHost", httpProxyHost); 
System.setProperty("http.proxyPort", httpProxyPort); 

System.setProperty("https.proxyHost", httpsProxyHost); 
System.setProperty("https.proxyPort", httpsProxyPort); 

我已经花了过去几天研究了互联网上,并没有发现任何有用的东西。我发现了一个关于C#API的解释,似乎是将代理设置为连接,并且我没有找到在Java上实现相同方法的方法。

我想要做这样的事情:

service = new YouTubeService(APPLICATION_NAME, DEVELOPER_KEY); 
service.setUserCredentials(userName, password); 
uploader = new ResumableGDataFileUploader.Builder(
     service, new URL(RESUMABLE_UPLOAD_URL), ms, newVideoEntry) 
      .title(videoTitle) 
      .trackProgress(listener, PROGRESS_UPDATE_INTERVAL) 
      .chunkSize(DEFAULT_CHUNK_SIZE).build(); 

// fictional code to show what I want to do 
uploader.setProxyHttp(httpProxyHost, httpProxyPort); 
uploader.setProxyHttps(httpsProxyHost, httpsProxyPort); 

uploader.start(); 

这非常类似于Java的已经允许我们这样做。看到这http://docs.oracle.com/javase/6/docs/technotes/guides/net/proxies.html

回答

0

我刚刚用下面的代码解决。调整方法setPersonalUrlConnectionFactory以设置您的代理并将其作为参数传递给您的上传器。

package com.google.gdata.client.uploader; 

import com.google.gdata.client.media.ResumableGDataFileUploader; 
import java.io.IOException; 
import java.net.HttpURLConnection; 
import java.net.URL; 
import java.util.logging.Level; 
import java.util.logging.Logger; 

public class PersonalUrlConnectionInjector { 

    public static void setPersonalUrlConnectionFactory(ResumableGDataFileUploader uploader) { 
     try { 
      java.lang.reflect.Field field = uploader.getClass().getSuperclass().getDeclaredField("urlConnectionFactory"); 
      field.setAccessible(true); 
      java.lang.reflect.Field modifiersField = java.lang.reflect.Field.class.getDeclaredField("modifiers"); 
      modifiersField.setAccessible(true); 
      modifiersField.setInt(field, field.getModifiers() & ~java.lang.reflect.Modifier.FINAL); 

      field.set(uploader, new UrlConnectionFactory() { 
       @Override 
       public HttpURLConnection create(URL url) throws IOException { 
        return new sun.net.www.protocol.http.HttpURLConnection(url, MY_PROXY); 
       } 
      }); 
     } catch (Exception e) { 
      /* DO LOG */ 
     } 
    } 
} 
+0

我不再工作了,如果有人在成功的情况下使用了这个解决方案,请告诉我,我会将答案标记为已接受。 – BertKlinger

相关问题