web-dev-qa-db-fra.com

Qu'est-ce que URLConnection.setDoOutput () affecte exactement?

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?

65
sharptooth

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);
84
Thilo

setDoOutput(true) est utilisé pour les demandes POST et PUT. Si c'est false, c'est pour utiliser les requêtes GET.

24
Petar Minchev

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
1
SoloPilot
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. 

0
Mithun Sasidharan