senden Sie das Formular mit HTTPURLConnection

Hallo, ich bin versucht, senden Sie das folgende Formular mit HTTPURLConnection als übung.

<form name="popnames" method="post" action="/cgi-bin/popularnames.cgi" onsubmit="return       submitIt();">
<p>
<label for="year">Birth Year:</label><br>
<input type="text" name="year" size="5" maxlength="4" id="year" value="2011">
</p>
<p>
<label for="rank">Popularity:</label><br>
<select name="top" size="1" id="rank">


<option value="20">Top 20</option>
  <option value="50">Top 50</option>
  <option value="100">Top 100</option>
  <option value="500">Top 500</option>
  <option value="1000">Top 1000</option>
</select>
</p>
<fieldset>
<legend>Name rankings may include:</legend>
<input type="radio" name="number" value="p" id="percent">
<label for="percent">Percent of total births</label><br>
<input type="radio" name="number" value="n" id="number">
<label for="number">Number of births</label>
</fieldset>
<hr>
<input class="uef-btn uef-btn-primary" type="submit" value="  Go  ">
</form>

Ich bin mit HTTPURLConnection zu tun, die senden Das ist mein code und meine test-Klasse

public class FormSubmitServiceTest {

@Test
public void testSubmit() throws Exception {
    String url = "http://www.socialsecurity.gov/OACT/babynames/#ht=1";
    Map<String, String> data = new HashMap<String, String>();
    data.put("year", "2010");
    data.put("top", "50");
    data.put("number", "n");

    FormSubmitService service = new FormSubmitService();
    service.doSubmit(url, data);
}
}  

Und meine service-Klasse, die die Arbeit

public class FormSubmitService {

    public void doSubmit(String url, Map<String, String> data) throws IOException {
        URL siteUrl = new URL(url);
        HttpURLConnection conn = (HttpURLConnection) siteUrl.openConnection();
        conn.setRequestMethod("POST");
        conn.setRequestProperty("Content-Type", 
               "application/x-www-form-urlencoded");
        conn.setUseCaches (true);
        conn.setDoOutput(true);
        conn.setDoInput(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();
    }
}

Kann jemand empfehlen, warum dies nicht funktioniert in dem Absenden des Formulars. Ist es weil ich bin nicht der Klick auf den submit-button mit einem Wert GEHEN. Und wenn das der Fall ist, dann wie kann ich tatsächlich auf, weil ich erwarten würde, zu schicken, um ein name /Wert-paar über, aber der submit-button keinen Namen hat nur einen Wert.

Wenn ich die form von diesem code, den ich erwarten, dass die Antwort enthalten die gleichen Daten wie wenn ich das Formular manuell die Daten auf dieser Seite http://www.socialsecurity.gov/cgi-bin/popularnames.cgi.

Jedoch auf die Ausführung der test-Klasse die Daten in der Antwort, die ich bekomme, ist die gleiche wie die ursprüngliche Seite http://www.socialsecurity.gov/OACT/babynames/#ht=1.

Alle Hilfe dankbar

Dank

Ich würde nicht verwenden eine DataOutputStream zu schreiben Körper, mit einem PrintStream statt. Sie sollten auch überprüfen Sie die Antwort bekommen vom server vor dem Lesen des input-Streams (getResponseCode).
Was ist der output Ihrer service-Klasse ist ein geben und was erwarten Sie?

InformationsquelleAutor user1107753 | 2013-04-04

Schreibe einen Kommentar