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

问题:

我成功使用这个代码通过GET方法发送HTTP个请求与一些参数

function 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 );
}

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: Java – sending HTTP parameters via POST method easily

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

58 − 51 =