在使用openConnection()为最终的httpget构建javaurl时,如何对CGI参数进行编码

在使用openConnection()为最终的httpget构建javaurl时,如何对CGI参数进行编码,java,http,cgi,Java,Http,Cgi,我需要使用java对CGI进行HTTP访问,并向其传递一些参数,其中一个参数本身就是带有一些嵌入CGI参数的URL 我试过了 String cgiArgs="client="+clientAddr+"&tag="+sessionId+"&rates="+ratesString +"&callbackURL="+URLEncoder.encode(callbackURL); if (null != debugGateway) cgiArgs += "&

我需要使用java对CGI进行HTTP访问,并向其传递一些参数,其中一个参数本身就是带有一些嵌入CGI参数的URL

我试过了

String cgiArgs="client="+clientAddr+"&tag="+sessionId+"&rates="+ratesString
    +"&callbackURL="+URLEncoder.encode(callbackURL);
if (null != debugGateway)
    cgiArgs += "&gateway=" +debugGateway; // for debugging
URI u_ = new URI("http", null, "scimitar", 3000, "/igmpcgi/allocateAuxiliaryStream",
        cgiArgs, null);
URL u = u_.toURL();
URLConnection conn = u.openConnection();
不幸的是,
java.net.URLEncoder.encode()
方法引用内容的方式会导致在
openConnection()
过程中再次被引用

当某些key=value对包含本身具有?、&、和=字符的字符串值时,构建CGI参数字符串的正确java方法是什么