0

Web アプリケーションに外部 URL のコンテンツをロードする必要があります。

HttpsUrlConnection と HttpCliente で試しましたが、忘れてしまいましたが、相対 URL が機能しないため問題があります。

私の webapp がで、 のhttp://example1.comコンテンツを請求しようとすると、たとえばhttp://external.comの相対 URL がで解決しようとしています。http://external.com/images/g.jpghttp://example1.com/images/g.jpg

私は絶望的です、私はグーグルを探しますが、何も見つかりません.

下手な英語でごめんなさい。

ありがとうございました!!!:-)

PD:私のコードがあります(コードでは、ヘリオスが相対URLを絶対URLに変更することについて述べていますが、機能しません...)

codigoHtml には相対リンクを含む html コードがありますが、動作しません!!

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {      

        DefaultHttpClient httpclient = new DefaultHttpClient();

        httpclient.getParams().setParameter(ClientPNames.DEFAULT_HOST, new HttpHost("host_to_redirect"));       

        HttpPost httpPost = new HttpPost("host_to_redirect/action.do");

        httpPost.addHeader("Location", "host_to_redirect");

        List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
        nameValuePairs.add(new BasicNameValuePair("name", "value"));
        nameValuePairs.add(new BasicNameValuePair("name", "value"));

        httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

        HttpResponse httpResponse = httpclient.execute(httpPost);

        httpResponse.addHeader("Location", "host_to_redirect");

        HttpEntity entity = httpResponse.getEntity();

        System.out.println("----------------------------------------");
        System.out.println(httpResponse.getStatusLine());
        System.out.println("----------------------------------------");

        if (entity != null) {
            // System.out.println(EntityUtils.toString(entity));
            response.setHeader("Location", "https://prepliberty.tirea.es:8065/pliberty");
            response.addHeader("Location", "https://prepliberty.tirea.es:8065/pliberty");

            String codigoHtml = EntityUtils.toString(entity);

            codigoHtml = codigoHtml.replaceAll("plib_script/", "host_to_redirect/plib_script/");            
            codigoHtml = codigoHtml.replaceAll("plib_css/", "host_to_redirect/plib_css/");
            codigoHtml = codigoHtml.replaceAll("plib_images/", "host_to_redirect/plib_images/");

            response.getWriter().write(codigoHtml);
        }   

    }
4

1 に答える 1

0

あなたがやろうとしていることは、Apache のmod_rewrite モジュールが行うことと似ています。

基本的に、提供された URL を書き換える必要があります。魔法の弾丸はありません。したがって、コンテンツがそれほど複雑でない場合は、コンテンツを文字列として取得し、置換 (または複数) を作成することをお勧めします。

何かのようなもの:

String html = ...content from URL... //beware of encoding!!! a lot of programmers neglect this!
html = html.replace(OLD_PREFIX, NEW_PREFIX);
// now you can use html

OLD_PREFIX もhttp://external.com/NEW_PREFIX も可能http://example1.com/

URL は常に二重引用符"で始まるため、接頭辞に先頭の". もちろん…差し替えはあるかもしれませんが…

于 2012-09-14T11:11:23.660 に答える