android HttpURLConnection Post方式设置参数,访问服务器

android HttpURLConnection Post方式设置参数,访问服务器

问题描述:

android HttpURLConnection Post方式设置参数,访问服务器 怎么写,

URL url = new URL("http://localhost:8080/TestHttpURLConnectionPro/index.jsp");

URLConnection rulConnection = url.openConnection();

// 此处的urlConnection对象实际上是根据URL的

// 请求协议(此处是http)生成的URLConnection类

// 的子类HttpURLConnection,故此处最好将其转化

// 为HttpURLConnection类型的对象,以便用到

// HttpURLConnection更多的API.如下:

HttpURLConnection httpUrlConnection = (HttpURLConnection) rulConnection;
// 设置是否向httpUrlConnection输出,因为这个是post请求,参数要放在

// http正文内,因此需要设为true, 默认情况下是false;

httpUrlConnection.setDoOutput(true);

// 设置是否从httpUrlConnection读入,默认情况下是true;

httpUrlConnection.setDoInput(true);

// Post 请求不能使用缓存

httpUrlConnection.setUseCaches(false);

// 设定传送的内容类型是可序列化的java对象

// (如果不设此项,在传送序列化对象时,当WEB服务默认的不是这种类型时可能抛java.io.EOFException)

httpUrlConnection.setRequestProperty("Content-type", "application/x-java-serialized-object");

// 设定请求的方法为"POST",默认是GET

httpUrlConnection.setRequestMethod("POST");

// 连接,从上述第2条中url.openConnection()至此的配置必须要在connect之前完成,

httpUrlConnection.connect();
// 此处getOutputStream会隐含的进行connect(即:如同调用上面的connect()方法,

// 所以在开发中不调用上述的connect()也可以)。

OutputStream outStrm = httpUrlConnection.getOutputStream();
// 现在通过输出流对象构建对象输出流对象,以实现输出可序列化的对象。

ObjectOutputStream objOutputStrm = new ObjectOutputStream(outStrm);

// 向对象输出流写出数据,这些数据将存到内存缓冲区中

objOutputStrm.writeObject(new String("我是测试数据"));

// 刷新对象输出流,将任何字节都写入潜在的流中(些处为ObjectOutputStream)

objOutputStm.flush();

// 关闭流对象。此时,不能再向对象输出流写入任何数据,先前写入的数据存在于内存缓冲区中,

// 在调用下边的getInputStream()函数时才把准备好的http请求正式发送到服务器

objOutputStm.close();

// 调用HttpURLConnection连接对象的getInputStream()函数,

// 将内存缓冲区中封装好的完整的HTTP请求电文发送到服务端。

InputStream inStrm = httpConn.getInputStream(); // <===注意,实际发送请求的代码段就在这里

// 上边的httpConn.getInputStream()方法已调用,本次HTTP请求已结束,下边向对象输出流的输出已无意义,

// 既使对象输出流没有调用close()方法,下边的操作也不会向对象输出流写入任何数据.

// 因此,要重新发送数据时需要重新创建连接、重新设参数、重新创建流对象、重新写数据、

// 重新发送数据(至于是否不用重新这些操作需要再研究)

objOutputStm.writeObject(new String(""));

httpConn.getInputStream()

/**以sendPost这个方法来说明吧,
* 向指定URL发送POST方法的请求
* @param url 发送请求的URL
* @param params 请求参数,请求参数应该是name1=value1&name2=value2的形式。
* @return URL所代表远程资源的响应
/
public static String sendPost(String url, String params)
{
PrintWriter out = null;
BufferedReader in = null;
String result = "";
try
{
URL realUrl = new URL(url);
// 打开和URL之间的连接
URLConnection conn = realUrl.openConnection();
// 设置通用的请求属性
conn.setRequestProperty("accept", "
/*");
conn.setRequestProperty("connection", "Keep-Alive");
conn.setRequestProperty("user-agent",
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)");
// 发送POST请求必须设置如下两行
conn.setDoOutput(true);
conn.setDoInput(true);
// 获取URLConnection对象对应的输出流
out = new PrintWriter(conn.getOutputStream());
// 发送请求参数
out.print(params); //②
// flush输出流的缓冲
out.flush();
// 定义BufferedReader输入流来读取URL的响应
in = new BufferedReader(
new InputStreamReader(conn.getInputStream()));
String line;
while ((line = in.readLine()) != null)
{
result += "\n" + line;
}
}
catch (Exception e)
{
System.out.println("发送POST请求出现异常!" + e);
e.printStackTrace();
}
// 使用finally块来关闭输出流、输入流
finally
{
try
{
if (out != null)
{
out.close();
}
if (in != null)
{
in.close();
}
}
catch (IOException ex)
{
ex.printStackTrace();
}
}
return result;
}
//然后调用
new Thread()
{
@Override
public void run()
{
response = sendPost(
"http://192.168.1.88:8888/abc/login.jsp"
, "name=crazyit.org&pass=leegang");
}//http://192.168.1.88:8888/abc/login.jsp即换成你的服务器地址,name=crazyit.org&pass=leegang换成你要发送的内容,即可
}.start();
希望能帮到你!

String url="http://www.baidu.com";

HttpUrlConnection conn=(HttpUrlConnection)new URL(url).openConnection();

conn.setConnectionTimeOut(5000);

conn.setRequestMethod("POST");

conn.setOutput(true);

//拿到输出流,设置参数

BufferedWriter bw=new BufferWriter(new OutputStreamWriter(conn.getOutputStream(),"utf-8"));

String params="get_code";

bw.write(params);