J'utilise avec succès ce code pour envoyer des HTTP
demandes avec certains paramètres via la GET
méthode
void sendRequest(String request)
{
// i.e.: request = "http://example.com/index.php?param1=a¶m2=b¶m3=c";
URL url = new URL(request);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setDoOutput(true);
connection.setInstanceFollowRedirects(false);
connection.setRequestMethod("GET");
connection.setRequestProperty("Content-Type", "text/plain");
connection.setRequestProperty("charset", "utf-8");
connection.connect();
}
Maintenant, je devrai peut-être envoyer les paramètres (c'est-à-dire param1, param2, param3) via la POST
méthode car ils sont très longs. Je pensais ajouter un paramètre supplémentaire à cette méthode (ie String httpMethod).
Comment modifier le moins possible le code ci-dessus pour pouvoir envoyer des paramètres via GET
ou POST
?
J'espérais que changer
connection.setRequestMethod("GET");
à
connection.setRequestMethod("POST");
aurait fait l'affaire, mais les paramètres sont toujours envoyés via la méthode GET.
A HttpURLConnection
une méthode qui pourrait aider? Existe-t-il une construction Java utile?
Toute aide serait très appréciée.
http://example.com/index.php
)Réponses:
Dans une demande GET, les paramètres sont envoyés dans le cadre de l'URL.
Dans une requête POST, les paramètres sont envoyés sous forme de corps de la requête, après les en-têtes.
Pour effectuer un POST avec HttpURLConnection, vous devez écrire les paramètres dans la connexion après avoir ouvert la connexion.
Ce code devrait vous aider à démarrer:
la source
byte[] data = urlParameters.getBytes(Charset.forName("UTF-8"))
:).conn.getResponseCode()
ou l'conn.getInputStream()
autre, sinon il n'enverra aucune donnée.Voici un exemple simple qui soumet un formulaire puis vide la page de résultats
System.out
. Modifiez l'URL et les paramètres POST selon le cas, bien sûr:Si vous voulez que le résultat soit
String
imprimé au lieu de le faire directement:la source
UTF-8
, ce qui n'est pas toujours le cas. Pour récupérer le jeu de caractères, il faut obtenir l'en-têteContent-Type
et analyser le jeu de caractères de cela. Lorsque cet en- tête ne sont pas disponibles, utilisez le standard http:ISO-8859-1
.<meta charset="...">
-<meta http-equiv="Content-Type" content="...">
tête ou dans le document qui doit être analysé.response += line;
est incroyablement lent et mange les sauts de ligne. J'ai ajouté à la réponse un exemple d'obtention d'une réponse de chaîne.Je n'ai pas pu obtenir l'exemple d' Alan pour faire le post, alors je me suis retrouvé avec ceci:
la source
je trouve
HttpURLConnection
vraiment très lourd à utiliser. Et vous devez écrire beaucoup de code passe-partout, sujet aux erreurs. J'avais besoin d'un wrapper léger pour mes projets Android et je suis sorti avec une bibliothèque que vous pouvez également utiliser: DavidWebb .L'exemple ci-dessus pourrait être écrit comme ceci:
Vous pouvez trouver une liste de bibliothèques alternatives sur le lien fourni.
la source
j'ai lu les réponses ci-dessus et j'ai créé une classe utilitaire pour simplifier la requête HTTP. j'espère que cela vous aidera.
Appel de méthode
Classe utilitaire
la source
Je vois que d'autres réponses ont donné l'alternative, je pense personnellement que vous faites intuitivement la bonne chose;). Désolé, chez devoxx où plusieurs orateurs se sont moqués de ce genre de choses.
C'est pourquoi j'utilise personnellement les bibliothèques HTTPClient / HttpCore d'Apache pour faire ce genre de travail, je trouve que leur API est plus facile à utiliser que le support HTTP natif de Java. YMMV bien sûr!
la source
la source
import java.net.*;
!J'ai eu le même problème. Je voulais envoyer des données via POST. J'ai utilisé le code suivant:
J'ai utilisé Jsoup pour l'analyse:
la source
Méthode GET et POST définie comme ceci ... Deux types d'appels API: 1) get () et 2) post (). get () pour obtenir la valeur du tableau api json pour obtenir la valeur et la méthode post () utilisée dans notre publication de données en url et obtenir une réponse.
la source
Essayez ce modèle:
la source
Cette réponse couvre le cas spécifique de l'appel POST utilisant un POJO Java personnalisé.
Utilisation de la dépendance maven pour maven Gson pour sérialiser notre objet Java en JSON.
Installez Gson en utilisant la dépendance ci-dessous.
Pour ceux qui utilisent Gradle, vous pouvez utiliser ce qui suit
Autres importations utilisées:
Maintenant, nous pouvons aller de l'avant et utiliser le HttpPost fourni par Apache
Le code ci-dessus reviendra avec le code de réponse reçu de l'appel POST
la source
ici j'ai envoyé jsonobject comme paramètre // jsonobject = {"name": "lucifer", "pass": "abc"} // serverUrl = " http://192.168.100.12/testing " //host=192.168.100.12
la source
Je recommande vivement la requête http sur apache http api.
Pour votre cas, vous pouvez voir un exemple:
Si vous n'êtes pas intéressé par le corps de réponse
Pour envoyer une demande de publication générale avec http-request : lire la documentation et voir mes réponses requête HTTP POST avec chaîne JSON en JAVA , envoi de requête HTTP POST en Java , HTTP POST utilisant JSON en Java
la source
Bonjour, veuillez utiliser cette classe pour améliorer votre méthode de publication
la source
J'ai pris la réponse de Boann et je l'ai utilisée pour créer un générateur de chaîne de requête plus flexible qui prend en charge les listes et les tableaux, tout comme la méthode http_build_query de php:
la source
Pour ceux qui ont du mal à recevoir la demande sur une page php en utilisant $ _POST car vous attendez des paires clé-valeur:
Bien que toutes les réponses aient été très utiles, il me manquait une compréhension de base sur la chaîne à publier, car dans l'ancien Apache HttpClient, j'utilisais
puis pourrait utiliser $ _POST en php obtenir les paires clé-valeur.
À ma connaissance, on a maintenant construit cette chaîne manuellement avant de poster. La chaîne doit donc ressembler à
mais au lieu de simplement l'ajouter à l'URL, il est publié (dans l'en-tête).
L'alternative serait d'utiliser une chaîne json à la place:
et tirez-le en php sans $ _POST:
Vous trouverez ici un exemple de code dans Kotlin:
la source
Apparaît que vous devez également appeler
connection.getOutputStream()
"au moins une fois" (ainsi quesetDoOutput(true)
) pour qu'il le traite comme un POST.Le code minimum requis est donc:
Vous pouvez même utiliser les paramètres de style "GET" dans l'urlString, de façon surprenante. Bien que cela puisse confondre les choses.
Vous pouvez également utiliser NameValuePair apparemment.
la source