2

youtube-api を使用して動画をアップロードする Java コードがあります。これまで、システム構成を使用してプロキシ (http および https) を設定していましたが、すべてが正常に機能しています。しかし今、サーバーでプロキシを使用する方法に関して、新しい要件があります。まったく同じサーバーで他のサービスを実行しているため、システム全体のアプローチを使用してプロキシを構成しないように求められました。これは、JVM を使用するすべてのサービスに影響するためです。

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

4

1 に答える 1

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 */
        }
    }
}
于 2014-04-28T20:19:10.823 に答える