Il y a setDoOutput()
dans URLConnection
. Selon documentation je devrais
Définissez l'indicateur DoOutput sur true si vous avez l'intention d'utiliser la connexion URL pour la sortie, sur false sinon.
Maintenant, je fais face à exactement ce problème - le runtime Java convertit la demande en POST
une fois que setDoOutput(true)
est appelé et que le serveur ne répond qu'aux requêtes GET
. Je veux comprendre ce qui se passe si je supprime ce setDoOutput(true)
du code.
Qu'est-ce que cela affectera exactement? Supposons que je le règle sur false
- que puis-je faire maintenant et que ne puis-je pas faire maintenant? Est-ce que je pourrai exécuter des demandes GET
? Qu'est-ce que "sortie" dans le contexte de cette méthode?
Vous devez lui attribuer la valeur true si vous souhaitez envoyer ( output ) un corps de requête, par exemple avec des requêtes POST ou PUT. Avec GET, vous n'envoyez généralement pas de corps, vous n'en avez donc pas besoin.
L'envoi du corps de la demande lui-même se fait via le flux de sortie de la connexion:
conn.getOutputStream().write(someBytes);
setDoOutput(true)
est utilisé pour les demandes POST
et PUT
. Si c'est false
, c'est pour utiliser les requêtes GET
.
Ajout d'un commentaire, si vous avez une connexion durable et que vous envoyez des GET et des POST, voici ce que je fais:
if (doGet) { // some boolean
con.setDoOutput(false); // reset any previous setting, if con is long lasting
con.setRequestMethod("GET");
}
else {
con.setDoOutput(true); // reset any previous setting, if con is long lasting
con.setRequestMethod("POST");
}
Et pour éviter que la connexion ne dure longtemps, fermez-la à chaque fois.
if (doClose) // some boolean
con.setRequestProperty("Connection", "close");
con.connect(); // force connect request
public void setDoOutput( boolean dooutput )
Il prend une valeur en tant que paramètre et définit cette valeur du champ doOutput
pour cette URLConnection sur la valeur spécifiée.
Une connexion URL peut être utilisée pour l'entrée et/ou la sortie. Définissez l'indicateur DoOutput sur true si vous avez l'intention d'utiliser la connexion URL pour la sortie, sur false sinon. Le défaut est faux.