2013-09-01 20 views
1

試圖自動完成這個HTML表單填充並返回下一頁上的數據。傳遞的數據沒有返回匹配網站內容的方式。 這是代碼:Java Html表單處理不返回輸入的數據字符串

parseSite() throws Exception 
{ 
    Map<String, String> data = new HashMap<>(); 
    data.put("txtEntryReg1", "35806573CB"); 
    data.put("txtEntryReg2", "35806573CB"); 
    data.put("t3", "8/30/2013 2:37:30 AM*"); 
    data.put("t3", "4:3844: 1NB/9143/21 *"); 

data.put("btnSubmit2","+Print+Your+Payment+Invoice"); 
    //data.putAll("txtEntryReg1=35278160IG&txtEntryReg2=35278160IG&t3=4%3A3623%3A+5NB%2F9143%2F21+*&t3=8%2F30%2F2013+2%3A15%3A24+AM*&btnSubmit2=+Print+Your+Payment+Invoice"); 
    //data.putAll(data); 

    //key1=value1&key2=value2&key3=value3 

     doSubmit("http://poters.com.ng/mo/std/acp_slp/1/default.aszp", data); 

} 

    public void doSubmit(String url, Map<String, String> data) throws Exception { 
    URL siteUrl = new URL(url); 
    HttpURLConnection conn = (HttpURLConnection) siteUrl.openConnection(); 
      // conn.setRequestProperty("Cookie", "__utma=244564033.513877751.1371763186.1376824439.1376824439.39; __utmc=244564033; __utmz=244564033.1373732391.30.3.utmcsr=login.lionet50.net|utmccn=(referral)|utmcmd=referral|utmcct=/login"); 
    conn.setRequestMethod("POST"); 
    conn.setDoInput(true); 
      conn.setDoOutput(true); 


    DataOutputStream out = new DataOutputStream(conn.getOutputStream()); 

    Set keys = data.keySet(); 
    Iterator keyIter = keys.iterator(); 
    String content = ""; 

      for(int i=0; keyIter.hasNext(); i++) { 
     Object key = keyIter.next(); 
     if(i!=0) { 
      content += "&"; 
     } 
     content += key + "=" + URLEncoder.encode(data.get(key), "UTF-8"); 
    } 


    System.out.println(content); 
    out.writeBytes(content); 
    out.flush(); 
    out.close(); 
    BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream())); 
    String line = ""; 
    while((line=in.readLine())!=null) { 
     System.out.println(line); 
    } 
    in.close(); 
}` 

的數據在打印時即的System.out.println(內容)。返回

&t3=4%3A3844%3A+1NB%2F9143%2F21+*&txtEntryReg2=35806573CB&btnSubmit2=%2BPrint%2BYour%2BPayment%2BInvoice

,但我想它打印 txtEntryReg1=35278160IG&txtEntryReg2=35278160IG&t3=+%3A3112%3A+8NB%2F0%2F213422*&t3=9%2F1%2F2013+12%3A00%3A17+AM*&btnSubmit=+Create+Payment+Invoice

試圖改變的data.put(...,...)爲了什麼,但仍在工作。 有人請求幫助

回答

1

這是因爲HashMap不保留記錄插入的順序。您可以改用LinkedHashMap

但是,爲什麼順序很重要?

+0

的順序很重要,因爲我測試的回報,在這個秩序「txtEntryReg1 = 35278160IG&txtEntryReg2 = 35278160IG&T3 = +%3A3112%3A + 8NB%2f0的%2F213422 * T3記錄解析的網站= 9%2F1%2F2013 + 12%3A00%3A17 + AM *&btnSubmit = +創建+付款+發票「但是一個礦井按此順序返回」&t3 = 4%3A3844%3A + 1NB%2F9143%2F21 + *&txtEntryReg2 = 35806573CB&btnSubmit2 =%2BPrint%2BYour%2BPayment%2BInvoice「 – Chimdi2000

0

。在你的代碼中沒有這樣的問題,除了以下:

你把價值t3的兩倍,因此在地圖將覆蓋它,你會得到只有一個值。此外,LinkedHashMap將有助於維持訂單。我不確定這是否優先。

如果您擔心編碼的URL,請使用URL解碼來獲取您可以閱讀的內容。這可以使用方法如下:

URLDecoder.decode(encodedURL) 
+0

哇!感謝Henry和dharam。它現在工作的很好...問題只是我更改爲LinkedHashMap的順序。再次感謝 – Chimdi2000

+0

哇...很高興知道它爲你工作。好。 – dharam