L'envoi de la Requête HTTP GET/POST de formulaire avec Java?
Donc, j'ai ce bout de code, et je l'ai eu à travailler, et maintenant, fondamentalement, ça me permet d'envoyer http post et des demandes pour presque n'importe quel site web externe je veux, SAUF si ces éléments ne contiennent pas d'un nom d'attribut. Voici un exemple:
C'est le code Java:
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();
}
C'est la forme que je suis en train d'envoyer une demande (c'est un formulaire sur le site w3schools, c'est le site 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>
Maintenant, parce que le bouton "Soumettre" n'est pas un attribut de nom, je ne peux pas envoyer une demande HTTP Get/Post demande (je sais que c'est une méthode d'obtenir dans ce cas). Que dois-je remplacer la Chaîne de données avec (à quoi bon les clés/valeurs) alors qu'en fait, il envoie une demande à cette forme?
Vous devez vous connecter pour publier un commentaire.
Je suis en utilisant HttpClient pour la génération de la requête http
HttpClient est open source apache projet. vous pouvez obtenir largement de code.
HttpClient la version 4.1 est bon ensemble de l'api Http
HttpClient Apprentissage Artical
Vous n'ajoutez pas de
submit
partie de vos données. C'est juste pour le navigateur de savoir que le bouton "Soumettre" déclenche l'action. Remarquez comment l'URL de la nouvellement ouvert le site est: http://www.w3schools.com/html/html_form_action.asp?user=myUserName - pas desubmit
partie ici. Si votredata
code devrait ressembler à ceci:GET
les demandes sont automatiquement remplacés par desPOST
lorsque vous appelezgetOutputStream()
. C'est une chose raisonnable à faire car d'habitude c'est ce que l'auteur voulait dire. Pour vraiment question d'unGET
demande de supprimer touteOutputStreamWriter
partie et ajouter votredata
à l'URL de la requête comme il se doit dans une valide requête GET:URL requestUrl = new URL(url + "?" + data);
. Bien sûr, vous n'avez toujours pas ajouter lesubmit
partie.?someData=value&otherData=value...
). Vous pouvez tout aussi bien taper dans votre barre d'adresse du navigateur et appuyez sur entrée. C'est le même que si vous avez rempli le formulaire et cliqué sur lesubmit
bouton. Pensez à OBTENIR quelque chose comme POST avec toutes les données transférées à partir de corps dans l'URL derrière le point d'interrogation. C'est un peu simpliste, mais il fera attraper l'idée. Jetez un oeil ici pour le code complet: pastebin.com/Zmf6irXC//Faisant la demande http get
//configuration des en-têtes (Serveur de comprendre la demande de jeter par certains navigateurs)
httpPost.setHeader("Referer",resultUrl+resultUrlAsp);
//Définir les paramètres
//Envoyer la demande
//Obtenir le corps de la Réponse
vous pouvez également obtenir les en-têtes, des paramètres http, cookies, de gérer la session par le code java... 🙂 🙂
J'ai un ClientHttpRequest classe qui fait tout multipartites, des dossiers, etc, avec en option le progrès de traçage et d'annulation. Il a été autour depuis environ 10 ans. Assez simple à utiliser.
Maintenant, il y a un Scala, en version. https://github.com/vpatryshev/ScalaKittens/blob/master/src/main/scala/scalakittens/ClientHttpRequest.scala
http://myjavatools.com/