Senden von HTTP-Request GET/POST-Formular mit Java?
Also ich habe dieses Stück code, und ich habe es zu arbeiten, und jetzt ist es im Grunde erlaubt es mir, zu senden, http post und get Anfragen, die auf beinahe jede externe website, die ich möchte, es sei denn, die Elemente nicht enthalten, die ein name-Attribut. Hier ist ein Beispiel:
Dies ist der Java-code:
public static String sendPostRequest(String url) {
StringBuffer sb = null;
try {
String data = URLEncoder.encode("user", "UTF-8") + "="
+ URLEncoder.encode("myUserName", "UTF-8") + "&"
+ URLEncoder.encode("submit", "UTF-8") + "="
+ URLEncoder.encode("Submit", "UTF-8");
URL requestUrl = new URL(url);
HttpURLConnection conn = (HttpURLConnection) requestUrl
.openConnection();
conn.setDoOutput(true);
conn.setRequestMethod("GET");
OutputStreamWriter osw = new OutputStreamWriter(
conn.getOutputStream());
osw.write(data);
osw.flush();
BufferedReader br = new BufferedReader(new InputStreamReader(
conn.getInputStream()));
String in = "";
sb = new StringBuffer();
while ((in = br.readLine()) != null) {
sb.append(in + "\n");
}
osw.close();
br.close();
} catch (UnsupportedEncodingException e) {
//TODO Auto-generated catch block
e.printStackTrace();
} catch (MalformedURLException e) {
//TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
//TODO Auto-generated catch block
e.printStackTrace();
}
return sb.toString();
}
Dies ist die form, die ich bin versucht, senden Sie eine Anfrage an (es ist ein Formular auf der w3schools-Website, die Website http://www.w3schools.com/html/html_forms.asp):
<form name="input0" target="_blank" action="html_form_action.asp" method="get">
Username:
<input type="text" name="user" size="20" />
<input type="submit" value="Submit" />
</form>
Nun, da der Submit-button nicht mit einem name-Attribut, kann ich nicht senden eine richtige HTTP-Get/Post-request, um es (ich weiß, es ist ein get-Methode in diesem Fall). Was muss ich tun, ersetzen Sie die Zeichenfolge-Daten mit (das, was ordnungsgemäße Schlüssel/Werte), damit es wirklich sendet eine Anforderung an diese form?
InformationsquelleAutor ZimZim | 2012-03-31
Du musst angemeldet sein, um einen Kommentar abzugeben.
Bin ich mit HttpClient für die Erzeugung von http-request -
HttpClient ist open source apache Projekt. Sie können erhalten weithin-code.
HttpClient version 4.1 guten Satz von Http-api
HttpClient Lernen Artical
HttpClient wird Ihnen eine bessere Lesbarkeit können Sie Sie lösen problem... ich bin mit diesem httpclien 4.1 in mein Projekt und seine abrufen von Daten aus einer URL.
InformationsquelleAutor Ankur Loriya
Du nicht hinzufügen, das
submit
Teil Ihrer Daten auf alle. Dies ist nur für den browser, um zu wissen, dass die Schaltfläche "Submit" löst die Aktion aus. Beachten Sie, wie die URL des neu geöffneten Seite sieht: http://www.w3schools.com/html/html_form_action.asp?user=myUserName - keinesubmit
Teil hier. So Ihrdata
code sollte wie folgt Aussehen:Dies kann sein, weil
GET
Anfragen werden automatisch ersetzt durchPOST
beim AufrufgetOutputStream()
. Dies ist eine vernünftige Sache zu tun, weil in der Regel das ist, was der Autor gemeint hat. Wirklich ein ProblemGET
Anfrage entfernen gesamteOutputStreamWriter
Teil und hängen Sie Ihredata
auf Anfrage-URL wie es sein sollte in einem gültigen GET-Anforderung:URL requestUrl = new URL(url + "?" + data);
. Natürlich ist Sie immer noch nicht, fügen Sie diesubmit
Teil.Aber wäre das nicht eine GET-Anfrage, das wäre einfach immer direkt den HTML-Quellcode einer bestimmten URL. Ich brauche, um eine Anfrage zu senden. Ich habe versucht, dies durch entfernen der Ausgabestrom ganz, aber es immer noch nur gibt die falschen Daten.
Nun, das ist, was ein GET-request ist in der Tat - nur eine URL mit query-Teil (
?someData=value&otherData=value...
). Sie können genauso gut geben Sie ihn manuell in Ihren browser-Adressleiste und drücken Sie die EINGABETASTE. Es ist das gleiche, als wenn Sie den Bogen ausgefüllt und drückte densubmit
- Taste. Denken BEKOMMEN, wie so etwas wie BEITRAG mit allen Daten verschoben vom Körper in der URL hinter dem Fragezeichen. Es ist ein bisschen vereinfacht, aber tun die Idee zu fangen. Werfen Sie einen Blick hier für vollständige code: pastebin.com/Zmf6irXCInformationsquelleAutor Bartosz Moczulski
//Das http-get-Anforderung
//setup-Header (Server verstehen Wunsch werfen, die von einigen browser)
httpPost.setHeader("Referer",resultUrl+resultUrlAsp);
//Set Parameter
//Anfrage senden
//Get-Response-body
außerdem können Sie die Header, http-Parameter, cookies, verwalten Sie die Sitzung über den java-code... 🙂 🙂
InformationsquelleAutor Ankur Loriya
Ich habe eine ClientHttpRequest Klasse, die nicht alle multiparts, Dateien, etc., optional mit Fortschritt tracing-und Abmeldung. Es ist schon seit über 10 Jahren. Ziemlich einfach zu bedienen.
Jetzt gibt es eine Scala-version zu. https://github.com/vpatryshev/ScalaKittens/blob/master/src/main/scala/scalakittens/ClientHttpRequest.scala
http://myjavatools.com/
InformationsquelleAutor Vlad Patryshev