2015-05-22 2 views
0

У меня проблема, я очень новичок в Java, и в настоящее время я пытаюсь создать приложение Java для загрузки файлов с веб-сайта. Для входа на сайт вам потребуется пароль и имя пользователя. Я использую NativeSwing для ввода и получения пути к файлам, я видел много примеров, но я не знаю, как их реализовать. Любые советы?Как загрузить XML-файл с веб-сайта с логином

public class Test { 
public JFrame frame; 
private static JWebBrowser browser; 

private static JPanel configurationButtonPanel; 

public Test() { 
    frame = new JFrame("Test"); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.add(createContent(), BorderLayout.CENTER); 
    frame.setSize(800, 800); 
    frame.setLocationByPlatform(true); 
    frame.setVisible(true); 
} 

public JComponent createContent() { 

    JPanel contentPane = new JPanel(new BorderLayout()); 
    JPanel configurationPanel = new JPanel(new BorderLayout()); 
    configurationButtonPanel = new JPanel(new FlowLayout(
      FlowLayout.CENTER, 0, 0)); 
    JButton beginButton = new JButton("Download"); 
    beginButton.addActionListener(new ActionListener() { 

    public void actionPerformed(ActionEvent e) { 
      ArrayList<String> ligas = new ArrayList<String>(); 
      int a=0; 
      Document doc = Jsoup.parse(browser.getHTMLContent()); 
      Element ele = doc.getElementById("ctl00_MainContent_PnlResultados"); 
      System.setProperty("java.net.useSystemProxies", "true"); 
     try{ 
      Elements img_2 = ele.getElementsByClass("BtnDescarga"); 
      for (Element el : img_2) { 
       for(Attribute attribute : el.attributes()) 
       { 
        if(attribute.getKey().equalsIgnoreCase("onclick")) 
        { 
         ligas.add("https://portalcfdi.facturaelectronica.sat.gob.mx/"+attribute.getValue().substring(19,535)); 
        } 
       } 
      } 
     } 
     catch(NullPointerException nulo){ 
     } 
      for(int i = 0 ; i < ligas.size() ; i++) { 
        System.out.println(ligas.get(i)); 
      } 
     } 
    }); 

    browser = new JWebBrowser(); 
    browser.navigate("https://cfdiau.sat.gob.mx/nidp/app/login?id=SATUPCFDiCon&sid=0&option=credential&sid=0"); 
    configurationButtonPanel.add(beginButton); 
    configurationButtonPanel.setVisible(true); 
    configurationPanel.add(configurationButtonPanel, BorderLayout.NORTH); 
    contentPane.add(configurationPanel, BorderLayout.SOUTH); 
    contentPane.add(browser, BorderLayout.CENTER); 
    return contentPane; 
} 
/** 
* @param args 
*/ 
public static void main(String[] args) { 
    NativeInterface.open(); 
    SwingUtilities.invokeLater(new Runnable() { 
     public void run() { 
      new Test(); 
     } 
    }); 
    NativeInterface.runEventPump(); 
} 
} 

Когда запустить эту часть

for(int i = 0 ; i < ligas.size() ; i++) { 
    System.out.println(ligas.get(i)); 
} 

Я получаю следующий URL, как это:

https://portalcfdi.facturaelectronica.sat.gob.mx/RecuperaCfdi.aspx?Datos=huswUYX1eXMlGkDiItMUBgaWREHHqhXOWtYxqyUh0oUZnCKLYE/gx6ENJ+0TwW5auWw8d/AiCJyuFSDNVY+5l0vkiELroo/fEmF+x5w+DQDDTfMX9qIINS1NgP9C1bFhirjcVXpZI1ed4ycpLPczkYMEGEKvqWemni8LWcbqC0BuZskOJnCQCaWRh1Kt7AL5GdBVKqkm3T5mvzhtkmE5dn0vcWbCFFO3d3G8hu7rlcc0XM+7+6iR52SZYYaHa/TOhcl2DjuzztADpa9tPxZ9VO6EzMVkYKTfDOqHwZO8m2U9BZ7UhFjqsyoAwsQneqhIqGwN21yEpGEcptsTb9uZ1t0Fc/1Ggd6SuK9NeGdBpiawn6cv6QM1uc4QQHMNpAgG89Rq5tOd4YAoRQHBe/vO8ppq60JwvJgQ4BN76EtZF0UtEWK+k57P01vatuvTHIdMBncbXyU+TrtE5AlhdGKkY2a8HwSxHw3nfoQ+SLBrjyg=

+0

Я думаю, что это совсем другой вопрос ...Возможно, название это неправильно, потому что реальная проблема заключается в «Вход в SAT и загрузка файлов» ... The! »#! @% SAT это« Проблема »(с P of $) # &" # $) – ThanatosMK

ответ

0

Они используют апплеты для нестандартной проверки подлинности, поэтому обратите внимание на мой второй пост. Этот метод действителен только для обычных механизмов аутентификации, я оставлю его здесь, потому что он может быть действительным для кого-то другого.

Сначала вам необходимо подключиться к этому сайту, отправив почтовый протокол аутентификации HTTPS с вашими учетными данными. Вы должны сделать все это сообщение в «https: // ...». Следующий шаг - прочитать значение cookie из ответа на аутентификацию, а затем установить этот файл cookie в заголовок следующего URL-соединения, которое вы будете делать для ресурса. Это стандартный механизм для сервера, чтобы отличать зарегистрированного пользователя, cookie аутентификации добавляется к каждому запросу после автоматического входа в систему браузером, но в java вам нужно сделать это вручную.

Он должен работать, если у сервера есть стандартный механизм проверки подлинности, если у него есть другой механизм, вам нужно отменить enginerrig, что отправить, используя, например, FireBug-плагин, и переключиться на вкладку «Сеть», , выйти из системы, загрузить файл, проверить, как выглядит сообщение, и повторить его в коде.

Здесь вы можете найти, как отправить AUTHENTICATION POST с параметрами в Java: http://www.mkyong.com/java/how-to-send-http-request-getpost-in-java/

Вы, вероятно, нужно отправить параметры, такие как пароль и логин, но он может меняться, смотрите на вкладке поджигатель сети, когда вы логин, он даст представление о том, какие параметры для этого выглядят. Например:

пароль = MySecretPassword & логин = MyLogin

как получить печенье:

URLConnection connection = new URL("your url").openConnection(); 

// insert auth parameters and set method to post 
// call doInput, doOutput on connection 
// read cookie 

    List<String> cookies = connection.getHeaderFields().get("Set-Cookie"); 
    myCookie = you need to change cookies list to one String containing all cookies, i don't have this code right now, but is should be easy. 
    URLConnection resourceCon = new URL("your url").openConnection(); 
    resourceCon.setRequestProperty("Cookie", myCookie); 
+0

I «Я тоже застрял в этой проблеме ... До сих пор я отслеживал каждый шаг и запрашивал, но я не могу идти вперед ... У меня есть: 1) Запросите страницу входа, чтобы получить файл cookie сессии, добавьте его в мой обработчик cookie, чтобы я мог использовать его для дальнейших запросов. 2) Опубликуйте свои учетные данные, взамен я получил cookie с userId (добавлен в обработчик) и

на ответ, который автоматически отправляется снова 3) Вручную отправьте форму, полученную с помощью куки-файлов, я получаю новый Если я верну последний бланк в свой браузер, он перейдет на страницу вошедшей в систему. Если я вручную разместил последнюю форму, я получил ошибку – ThanatosMK

0

Я вижу, что они не используют стандартный механизм аутентификации на этом сайте:

https://cfdiau.sat.gob.mx/nidp/wsfed/ep?id=SATx509Custom&sid=0&option=credential&sid=0

Они используют некоторые апплеты, вам необходимо загрузить файлы апплетов, которые у них есть:

https://cfdiau.sat.gob.mx/nidp/applet/SgiCripto.jar и https://cfdiau.sat.gob.mx/nidp/applet/x509applet.jar

Тогда вы могли бы использовать некоторые Java Decompiler, например, это один: http://jd.benow.ca/

И после декомпиляции этого проекта, вы должны копать, чтобы код и сделать реверс-инжиниринг для изучения того, как работает этот сайт.

Смежные вопросы