`
dying
  • 浏览: 5864 次
  • 性别: Icon_minigender_1
  • 来自: 南京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

向指定URL发送GET/POST请求

阅读更多

使用Java发送GET、POST请求 ——节选自《疯狂Java讲义》
URL的openConnection()方法将返回一个URLConnection对象,该对象表示应用程序和 URL 之间的通信链接。程序可以通过URLConnection实例向该URL发送请求、读取URL引用的资源。

通常创建一个和 URL 的连接,并发送请求、读取此 URL 引用的资源需要如下几个步骤:
(1)通过调用URL对象openConnection()方法来创建URLConnection对象。
(2)设置URLConnection的参数和普通请求属性。
(3)如果只是发送GET方式请求,使用connect方法建立和远程资源之间的实际连接即可;如果需要发送POST方式的请求,需要获取URLConnection实例对应的输出流来发送请求参数。

(4)远程资源变为可用,程序可以访问远程资源的头字段、或通过输入流读取远程资源的数据。

在建立和远程资源的实际连接之前,程序可以通过如下方法来设置请求头字段:
setAllowUserInteraction:设置该URLConnection的allowUserInteraction请求头字段的值。
setDoInput:设置该URLConnection的doInput请求头字段的值。
setDoOutput:设置该URLConnection的doOutput请求头字段的值。
setIfModifiedSince:设置该URLConnection的ifModifiedSince请求头字段的值。
setUseCaches:设置该URLConnection的useCaches请求头字段的值。

除此之外,还可以使用如下方法来设置、或增加通用头字段:
setRequestProperty(String key, String value):设置该URLConnection的key请求头字段的值为value。如下代码所示:
conn.setRequestProperty("accept" , "*/*")

addRequestProperty(String key, String value):为该URLConnection的key请求头字段增加value值,该方法并不会覆盖原请求头字段的值,而是将新值追加到原请求头字段中。

当远程资源可用之后,程序可以使用以下方法用于访问头字段和内容:

Object getContent():获取该URLConnection的内容。
String getHeaderField(String name):获取指定响应头字段的值。
getInputStream():返回该URLConnection对应的输入流,用于获取URLConnection响应的内容。
getOutputStream():返回该URLConnection对应的输出流,用于向URLConnection发送请求参数。

注意:如果既要使用输入流读取URLConnection响应的内容,也要使用输出流发送请求参数,一定要先使用输出流,再使用输入流。
getHeaderField方法用于根据响应头字段来返回对应的值。而某些头字段由于经常需要访问,所以Java提供了以下方法来访问特定响应头字段的值:
getContentEncoding:获取content-encoding响应头字段的值。
getContentLength:获取content-length响应头字段的值。
getContentType:获取content-type响应头字段的值。
getDate():获取date响应头字段的值。
getExpiration():获取expires响应头字段的值。
getLastModified():获取last-modified响应头字段的值。

下面程序示范了如何向Web站点发送GET请求、POST请求,并从Web站点取得响应的示例。

import java.io.*;
import java.net.*;
import java.util.*;
public class TestGetPost{
 /**
  * 向指定URL发送GET方法的请求
  * @param url 发送请求的URL
  * @param param 请求参数,请求参数应该是name1=value1&name2=value2的形式。
  * @return URL所代表远程资源的响应
  */
 public static String sendGet(String url , String param){
  String result = "";
  BufferedReader in = null;
  try
  {
   String urlName = url + "?" + param;
   URL realUrl = new URL(urlName);
   //打开和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)"); 
   //建立实际的连接
   conn.connect(); 
   //获取所有响应头字段
   Map< String,List< String>> map = conn.getHeaderFields();
   //遍历所有的响应头字段
   for (String key : map.keySet()){
    System.out.println(key + "--->" + map.get(key));
   }
   //定义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("发送GET请求出现异常!" + e);
    e.printStackTrace();
  }
  //使用finally块来关闭输入流
  finally
  {
   try
   {
    if (in != null)
      {
        in.close();
     }  
   }
   catch (IOException ex)
   {
    ex.printStackTrace();
   }
 }
 return result;
}
  /**
   * 向指定URL发送POST方法的请求
   * @param url 发送请求的URL
   * @param param 请求参数,请求参数应该是name1=value1&name2=value2的形式。
   * @return URL所代表远程资源的响应
   */
 public static String sendPost(String url,String param)
  {
   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(param);
    //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;
 }
 //提供主方法,测试发送GET请求和POST请求
 public static void main(String args[])
 {
   //发送GET请求
  String s = TestGetPost.sendGet("http://localhost:8888/abc/login.jsp",null);
  System.out.println(s);
  //发送POST请求
  String s1 = TestGetPost.sendPost("http://localhost:8888/abc/a.jsp","user=李刚&pass=abc");
  System.out.println(s1);
 }
}

上面程序中发送GET请求时只需将请求参数放在URL字符串之后,以?隔开,程序直接调用URLConnection对象的connect方法即可;如果程序需要发送POST请求,则需要先设置doIn和doOut两个请求头字段的值,再使用URLConnection对应的输出流来发送请求参数即可。

不管是发送GET请求,还是发送POST请求,程序获取URLConnection响应的方式完全一样:如果程序可以确定远程响应是字符流,则可以使用字符流来读取;如果程序无法确定远程响应是字符流,则使用字节流读取即可。

注意:上面程序中发送请求的两个URL是笔者在本机部署的Web应用,由于程序可以使用这种方式直接向服务器发送请求——相当于提交Web应用中的登陆表单页,这样就可以让程序不断地变换用户名、密码来提交登陆请求,直到返回登陆成功,这就是所谓的暴力破解。

分享到:
评论

相关推荐

    GO接收GET/POST参数及发送GET/POST请求的实例详解

    GET 和 POST 是我们最常用的两种请求方式,今天讲一讲如何在 golang 服务中,正确接收这两种请求的参数信息。 处理GET请求 1.1 接收GET请求 //接收GET请求 func Get(writer http.ResponseWriter , request *...

    向指定 URL 发送POST、GET方法的请求

    向指定 URL 发送POST、GET方法的请求

    C/C++利用Boost库发送POST/GET请求

    http协议是互联网上应用最为广泛的一种网络协议,他在接口中扮演着重要的角色,Post/Get请求,想必大家都有所耳闻,我们一起利用Boost::Asio库来实现Post/Get请求的发送。 VS2013 文章地址:...

    引用开源框架通过AsyncHttpClient处理get/post请求

    2.发送post请求,(get请求参数含义:请求的url地址;异步请求的handler) 3.封装请求参数 4.在成功请求里(status:响应状态码,headers:响应头信息,responseBody相应内容的字节码)设置控件内容

    Delphi两种方法演示HTTP请求:GET/POST.rar

    GET/POST方法使用演示,程序将演示使用这两种方法建立会话、建立一个http请求句柄、发送一个指定请求到httpserver、接收header信息和一个http请求、指向一个接收请求信息的缓冲区的指针、取得url的主机名和文件名等...

    解决boa服务器get/post请求中文乱码问题

    https://blog.csdn.net/myWorld001/article/details/109261850

    java网络编程中向指定URL发送GET POST请求示例

    主要介绍了java向指定URL发送GET POST请求示例,学习JAVA网络编程一定会用到的,大家参考使用吧

    java实现get请求post请求,文件传输

    java实现get请求post请求,文件传输 /** * 发送https请求 * @param requestUrl 请求地址 * @param requestMethod 请求方式(GET、POST) * @param outputStr 提交的数据 * @return 返回微信服务器响应的信息 ...

    Java如何实现URL带请求参数(get/post)及得到get和post请求url和参数列表的方法

    本文给大家介绍Java如何实现URL带请求参数(get/post)及得到get和post请求url和参数列表的方法,涉及到java获取post请求参数的方法,感兴趣的朋友一起看看吧

    Node.js系列之发起get/post请求(2)

    服务器与浏览器的交互主要方式有get/post请求。 下面,我们来看一下node.js发起get/post请求。 1、get 由于get请求的参数在url后面,所以相对比较简单。node.js中的url模块提供了parse函数来处理。具体代码如下: ...

    Linux下模拟http的get/post请求(curl or wget)详解

    Linux下模拟http的get/post请求(curl or wget)详解 背景 最近项目中需要测试接口,但是测试服务器通过堡垒机才能访问,暂时又没有通过Nginx进行转发,只好直接在Linux上模拟http请求进行测试。 方法 get请求 curl ...

    java使用url发送post和get请求:HttpConnUtils.jar

    当前工具类资源为java后台使用url,发送post、get请求,同时传递参数,简单封装,可直接导入使用

    PHP中使用CURL发送get/post请求上传图片批处理功能

    php中有curl拓展,一般用来实现网络抓取,模拟发送get post请求,文件上传。 在php中建立curl的基本步骤如下: 1.初始化  2. 设置选项,包括url  3. 执行并获取结果  4. 释放curl句柄。 在工作和学习中,我也是...

    get和post请求的区别.pdf

    相比之下,POST请求用于向服务器发送数据,通常用于提交表单数据或上传文件。当浏览器发送POST请求时,数据被包含在请求体中,而不是URL中。这意味着POST请求可以发送大量的数据,并且没有URL长度的限制。此外,由于...

    php 利用socket发送GET,POST请求的实例代码

     在日常编程中相信很多人和我一样大部分时间是利用浏览器向服务器提出GET,POST请求,那么可否利用其它方式提出GET,POST请求呢?答案必然是肯定的。了解过HTTP协议的人知道,浏览器提交请求的实质是向服务器发送一...

    微信小程序封装get、post请求

    1、get 、post请求promise封装 (common.js)   //post请求 url:请求路径,请求header,params请求参数,app全局变量 function networkpost(url, headers, params, app) { let promise = new Promise(function ...

    Java中Http请求的工具类

    向指定URL发送GET方法的请求 获取网络图片返回byte数组 向指定 URL 发送POST方法的请求 向指定URL发送POST方法的请求(application/json格式发送数据) 向指定URL发送POST方法的请求(application/xml格式发送数据)...

    Android发送GET与POST请求的DEMO详解

    4.0后网络访问必须单独起一个子线程访问,否则无法运行,这里有一个发送请求的工具类GetPostUtil 代码如下:public class GetPostUtil{ /** * 向指定URL发送GET方法的请求 * * @param url * 发送请求的URL * @...

    GET请求和POST请求的区别(详细)

    URL全称是资源描述符,我们可以这样认为:一个URL地址,它用于描述一个网络上的资源,而HTTP中的GET,POST,PUT,DELETE就对应着对这个资源的查,改,增,删4个操作。到这里,大家应该有个大概的了解了,GET一般用于...

Global site tag (gtag.js) - Google Analytics