Java - 通过 POST 方法轻松发送 HTTP 参数

我已成功使用此代码通过 GET 方法发送带有一些参数的 HTTP 请求

void sendRequest(String request)
{
    // i.e.: request = "http://example.com/index.php?param1=a&param2=b&param3=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();
}

现在我可能需要通过 POST 方法发送参数(即 param1、param2、param3),因为它们很长。 我正在考虑为该方法添加一个额外的参数(即 String httpMethod)。

如何尽可能少地更改上面的代码,以便能够通过 GETPOST 发送参数?

我希望改变

connection.setRequestMethod("GET");

connection.setRequestMethod("POST");

本来可以,但参数仍然通过 GET 方法发送。

HttpURLConnection 有什么方法有用吗? 有什么有用的 Java 构造吗?

非常感谢任何帮助。

最佳答案

在 GET 请求中,参数作为 URL 的一部分发送。

在 POST 请求中,参数作为请求正文发送,位于请求头之后。

要使用 HttpURLConnection 进行 POST,您需要在打开连接后将参数写入连接。

此代码应该可以帮助您入门:

String urlParameters  = "param1=a&param2=b&param3=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 );
}

https://stackoverflow.com/questions/4205980/

相关文章:

java - 在 Java 中检查字符串是否为空或 null

java - Java 中最接近函数指针的替代品是什么?

java - 使用 appcompat v7 更改 EditText 底线颜色

java - 如何在 Java 中获取用户输入?

java - 如何使用 LocalDateTime 解析/格式化日期? (Java 8)

java - Java 中如何使用匿名内部类?

java - 如果可以使用 synchronized(this),为什么还要使用 Reentrant

java - Java中的静态 block

java - 当 Javadoc 标记不完整时,Maven 无法在 Java 8 中运行

java - 使模板更容易的 JSP 技巧?