baidu_19694879
2016-03-22 07:01
采纳率: 50%
浏览 4.3k

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

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

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

4条回答 默认 最新

  • 姚__ 2016-03-22 08:03
    已采纳

    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()

    已采纳该答案
    打赏 评论
  • 103style 2016-03-22 08:00
    打赏 评论
  • iwshuang 2016-03-22 09:56

    /**以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();
    希望能帮到你!

    打赏 评论
  • liuke0002 2016-03-25 06:42

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

    打赏 评论

相关推荐 更多相似问题