Java - базовый URL после перенаправления 302 - PullRequest
0 голосов
/ 29 января 2020

У меня возникла следующая проблема. В моем приложении мне нужно отправить файл XML на сервер и дождаться его ответа. Я достиг вышеуказанного, используя Apache HttpClient:

  • , создайте xml
  • , используя HttpClient и Post, чтобы отправить его на сервер

Сервер первоначально ответил 302 (Объект перемещен), поэтому я использовал LaxRedirectStrategy, чтобы иметь возможность следовать перенаправлению. Я помещаю ответ в StringBuffer, а затем помещаю sh в новую вкладку браузера. Все работает нормально, на вкладке отображается полный ответ от этого сервера, но каждое действие на этой странице связано не с URL-адресом ответа сервера, а с моим основным приложением. Так, например, если мое приложение на https://myapplication.com, а сервер на https://theotherserver.com (+ / редирект для перенаправления), каждое действие на странице (т.е. / действие) приводит к https://myapplication.com/action, а не к https://theotherserver.com/action.

На моей странице у меня есть кнопка, с которой начинается этот процесс. Когда вы щелкаете по нему, он выполняет:

   jQuery('input#button').on
            (
                'click',
                function ()
                {
                    jQuery.ajax
                    (
                        {
                            url: 'myURL.do',
                            data: {data: mydata},
                            method: 'POST',
                            success: function(data)
                            {
                                if (data.success == 'true')
                                {
                                    var w = window.open('tab', windowname');
                                    w.document.write(data.result);
                                    w.document.close();
                                    w.focus();
                                }
                                else
                                {
                                    alert(data.error);
                                }
                            }
                        });
                    });

.do выполняет следующее:

public ResponseEntity<Map<String, String>> myMethod(HttpServletRequest request, HttpServletResponse response) throws ParserConfigurationException
    {
        Map<String, String> respData = new HashMap<String, String>();
        try
        {
            String myXML = prepareMyXMLFile();   

            String result = sendMyXMLFile(myXML);

            respData.put("success", String.valueOf(true));
            respData.put("result", result);
            return new ResponseEntity<Map<String, String>>(respData, HttpStatus.OK);
        }
        catch (Exception e)
        {
            respData.put("success", String.valueOf(false));
            respData.put("error", String.valueOf(e));
            return new ResponseEntity<Map<String, String>>(respData, HttpStatus.INTERNAL_SERVER_ERROR);
        }
    }

и, наконец, sendMyXMLFile ():

private String sendMyXML(String myXML)
{
    try
    {
        HttpClient client = HttpClientBuilder.create().setRedirectStrategy(new LaxRedirectStrategy()).build();
        HttpPost post = new HttpPost("myURL");
        List<NameValuePair> urlParameters = new ArrayList<NameValuePair>();
        urlParameters.add(new BasicNameValuePair("xml", myXML));

        post.setEntity(new UrlEncodedFormEntity(urlParameters));

        HttpResponse response = client.execute(post);

        BufferedReader rd = new BufferedReader(new 
        InputStreamReader(response.getEntity().getContent()));

        StringBuffer responseResult = new StringBuffer();
        String line = "";
        while ((line = rd.readLine()) != null)
        {
            responseResult.append(line);
        }
        return responseResult.toString();
     }
     catch (IOException | TransformerException e)
     {
         //log error
     }
     return null;
 }

Что делать Мне нужно сделать, чтобы использовать URL-адрес ответа в качестве базового URL-адреса на другой вкладке? Любая помощь приветствуется. Спасибо

...