Si hallas algún error con tu código o trabajo, recuerda probar siempre en un ambiente de testing antes subir el código al proyecto final.
Solución:
En una solicitud GET, los parámetros se envían como parte de la URL.
En una solicitud POST, los parámetros se envían como cuerpo de la solicitud, después de los encabezados.
Para hacer una POST con HttpURLConnection, debe escribir los parámetros en la conexión después de haberla abierto.
Este código debería ayudarlo a comenzar:
String urlParameters = "param1=a¶m2=b¶m3=c";
byte[] postData = urlParameters.getBytes( StandardCharsets.UTF_8 );
int postDataLength = postData.length;
String request = "http://example.com/index.php";
URL url = new URL( request );
HttpURLConnection conn= (HttpURLConnection) url.openConnection();
conn.setDoOutput( true );
conn.setInstanceFollowRedirects( false );
conn.setRequestMethod( "POST" );
conn.setRequestProperty( "Content-Type", "application/x-www-form-urlencoded");
conn.setRequestProperty( "charset", "utf-8");
conn.setRequestProperty( "Content-Length", Integer.toString( postDataLength ));
conn.setUseCaches( false );
try( DataOutputStream wr = new DataOutputStream( conn.getOutputStream()))
wr.write( postData );
Aquí hay un ejemplo simple que envía un formulario y luego vuelca la página de resultados a System.out
. Cambie la URL y los parámetros POST según corresponda, por supuesto:
import java.io.*;
import java.net.*;
import java.util.*;
class Test
public static void main(String[] args) throws Exception
URL url = new URL("http://example.net/new-message.php");
Map params = new LinkedHashMap<>();
params.put("name", "Freddie the Fish");
params.put("email", "[email protected]");
params.put("reply_to_thread", 10394);
params.put("message", "Shark attacks in Botany Bay have gotten out of control. We need more defensive dolphins to protect the schools here, but Mayor Porpoise is too busy stuffing his snout with lobsters. He's so shellfish.");
StringBuilder postData = new StringBuilder();
for (Map.Entry param : params.entrySet())
if (postData.length() != 0) postData.append('&');
postData.append(URLEncoder.encode(param.getKey(), "UTF-8"));
postData.append('=');
postData.append(URLEncoder.encode(String.valueOf(param.getValue()), "UTF-8"));
byte[] postDataBytes = postData.toString().getBytes("UTF-8");
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
conn.setRequestMethod("POST");
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
conn.setRequestProperty("Content-Length", String.valueOf(postDataBytes.length));
conn.setDoOutput(true);
conn.getOutputStream().write(postDataBytes);
Reader in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
for (int c; (c = in.read()) >= 0;)
System.out.print((char)c);
Si quieres el resultado como un String
en lugar de imprimir directamente hacer:
StringBuilder sb = new StringBuilder();
for (int c; (c = in.read()) >= 0;)
sb.append((char)c);
String response = sb.toString();
No pude hacer que el ejemplo de Alan realmente hiciera la publicación, así que terminé con esto:
String urlParameters = "param1=a¶m2=b¶m3=c";
URL url = new URL("http://example.com/index.php");
URLConnection conn = url.openConnection();
conn.setDoOutput(true);
OutputStreamWriter writer = new OutputStreamWriter(conn.getOutputStream());
writer.write(urlParameters);
writer.flush();
String line;
BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
while ((line = reader.readLine()) != null)
System.out.println(line);
writer.close();
reader.close();
Puntuaciones y comentarios
Te invitamos a añadir valor a nuestro contenido cooperando tu experiencia en las notas.