Java HttpURLConnection即使在setDoOutput(true)、setRequestMethod(“POST”)和setRequestProperty(“Content”)之后仍执行get请求

Java HttpURLConnection即使在setDoOutput(true)、setRequestMethod(“POST”)和setRequestProperty(“Content”)之后仍执行get请求,java,android,post,http-post,httpurlconnection,Java,Android,Post,Http Post,Httpurlconnection,代码如下: String Surl = "http://mysite.com/somefile"; String charset = "UTF-8"; query = String.format("param1=%s&param2=%s", URLEncoder.encode("param1", charset), URLEncoder.encode("param2", charset)); HttpURLConnection urlConnection = (HttpURLConne

代码如下:

String Surl = "http://mysite.com/somefile";
String charset = "UTF-8";
query = String.format("param1=%s&param2=%s",
URLEncoder.encode("param1", charset),
URLEncoder.encode("param2", charset));

HttpURLConnection urlConnection = (HttpURLConnection) new URL(Surl + "?" + query).openConnection();
urlConnection.setRequestMethod("POST");             
urlConnection.setDoOutput(true);
urlConnection.setUseCaches(false);
urlConnection.setAllowUserInteraction(false);
urlConnection.setRequestProperty("Accept-Charset", charset);
urlConnection.setRequestProperty("User-Agent","<em>Android</em>");
urlConnection.setRequestProperty("Content-Type","application/x-www-form-urlencoded;charset=" + charset);                
urlConnection.connect();
stringsurl=”http://mysite.com/somefile";
字符串charset=“UTF-8”;
query=String.format(“param1=%s¶m2=%s”,
URLEncoder.encode(“参数1”,字符集),
encode(“param2”,字符集));
HttpURLConnection urlConnection=(HttpURLConnection)新URL(Surl+“?”+query).openConnection();
urlConnection.setRequestMethod(“POST”);
urlConnection.setDoOutput(true);
urlConnection.setUseCaches(false);
urlConnection.setAllowUserInteraction(false);
setRequestProperty(“接受字符集”,字符集);
setRequestProperty(“用户代理”、“Android”);
urlConnection.setRequestProperty(“内容类型”,“应用程序/x-www-form-urlencoded;字符集=“+charset”);
urlConnection.connect();
上面仍然执行
GET
请求。我在服务器上使用PHP,能够通过
$\u GET
变量而不是
$\u POST
变量访问查询的'name=value'参数
根据2.3.7(装置)进行测试


我缺少什么?

当您在url中发送参数时,这些参数会被放入GET变量中。您应该在请求的POST正文中发布参数,以实现所需的功能。您应该在connect()调用之前添加以下内容,并从url中删除“+”查询

    urlConnection.setRequestProperty("Content-Length", String.valueOf(query.getBytes().length));            
    urlConnection.setFixedLengthStreamingMode(query.getBytes().length);

    OutputStream output = new BufferedOutputStream(urlConnection.getOutputStream());            
    output.write(query.getBytes());
    output.flush(); 
    output.close();

这看起来有点可疑:Surl+“?”+查询。您如何验证它是否正在执行get请求?@tjg184我在服务器上使用PHP,能够通过
$\u get
变量而不是
$\u POST
变量访问查询的'name=value'参数。不知道在执行POST时必须手动写入参数!这就解决了问题。谢谢。