Logo

郎哥编程

发送HTTP请求到服务器

2020-01-10 205

当Java程序需要向服务器发送请求或读取服务器数据时,使用URLConnection类是比较好的选择。URLConnection类封装了与服务器互动操作的方法,通过它可以建立与服务器的远程连接,检查服务器资源的属性,向服务器发送请求并接收服务器返回的数据。

URLConnection类是一个抽象类,它不能直接实例化为对象,但URL实例对象可以返回一个URLConnection类的子类对象。返回的子类对象与URL打开的网络资源采用的协议有关。如果是HTTP协议,URL实例对象会返回HttpURLConnection对象。如果是FTP协议,URL实例对象会返回FtpURLConnection对象。

URLConnection类常用方法说明如下:

void   connect()

该方法用于与远程资源建立连接。如果尚未建立此连接,则打开指向此URL引用的资源链接。如果在连接已打开时调用connect方法(由值为true的connected字段指示),则忽略该调用。

void   setRequestProperty(String key, String value)

该方法用于设置网络资源请求属性。Key参数为已知请求的关键字(例如,“Accept”),value是与key关联的值。

void   setReadTimeout(int timeout)

该方法用于设置读取网络资源数据超时时间(以毫秒为单位)。

void   setConnectTimeout(int timeout)

该方法用于设置连接网络资源的超时时间(以毫秒为单位)

InputStream    getInputStream()

该方法用于返回从这个打开的连接读取的输入流。

HttpURLConnection类常用方法说明如下:

int  getResponseCode()

该方法从HTTP响应消息获取状态代码。返回200表示请求响应成功,其它值表示请求响应失败。

void   setRequestMethod(String method)

该方法设置HTTP请求方法之一:GET/POST/HEAD/OPTIONS/PUT/DELETE/TRACE。默认是GET。

案例1:建立URLConnectionTest类,连接远程服务器,向服务器发送服务请求,并接收服务器的请求响应数据。

案例连接的远程服务器地址:

http://milihua.com/sum.aspx

该远程服务提供求两数和服务,客户端向该服务发送服务请求,并向该服务提交两个待求和的整数,该服务返回求和结果。

在ip包下新建URLConnectionTest类。代码如下:

package ip;
 
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
 
/**
 * @ClassName: URLConnectionTest
 * @Description: 网络编程(发送HTTP请求到服务器)案例1
 * @author 编程训练营
 * @date
 *
 */
 
public class URLConnectionTest {
 
    /**
     * @Title: main
     * @Description: Java程序入口main方法
     * @param @param args 参数
     *
     * @return void 返回类型 @throws
     */
 
    public static void main(String[] args) {
       HttpURLConnection connection = null;
       InputStream stream = null;
       BufferedReader reader = null;
       String server = "http://milihua.com/sum.aspx?opone=30&optwo=60";
       try {
           // 实例化URL对象
           URL url = new URL(server);
           // 通过URL对象打开一个连接,显示转换为httpURLConnection类
           connection = (HttpURLConnection) url.openConnection();
           // 设置连接方式:get
           connection.setRequestMethod("GET");
           // 设置连接远程服务的超时时间:15000毫秒
           connection.setConnectTimeout(15000);
           // 设置读取远程服务返回的数据时间:60000毫秒
           connection.setReadTimeout(60000);
           // 建立连接,发送请求
           connection.connect();
           // 通过connection连接,获取输入流
           if (connection.getResponseCode() == 200) {
              // 从打开的连接获取输入流,接收返回数据
              stream = connection.getInputStream();
              // 实例化BufferedReader对象,并指定字符集
              reader = new BufferedReader(new InputStreamReader(stream, "UTF-8"));
              // 实例化字符串生成器
              StringBuffer sbf = new StringBuffer();
              String temp = null;
              // 从输入流读取数据
              while ((temp = reader.readLine()) != null) {
                  sbf.append(temp);
                  sbf.append("\r\n");
              }
              // 返回内容输出到控制台
              System.out.println("远程服务返回的数据:" + sbf.toString());
           }
       } catch (MalformedURLException e) {
           e.printStackTrace();
       } catch (IOException e) {
           e.printStackTrace();
       } finally {
           // 关闭资源
           if (null != reader) {
              try {
                  reader.close();
              } catch (IOException e) {
                  e.printStackTrace();
              }
           }
           if (null != stream) {
              try {
                  stream.close();
              } catch (IOException e) {
                  e.printStackTrace();
              }
           }
           // 关闭远程连接
           connection.disconnect();
       }
 
    }
 
}

URLConnectionTest程序的主要功能是请求一个求两数和的远程服务,并向远程服务提交待求和的两个整数,远程服务计算两数的和,并将计算结果返回给程序,程序将计算结果输出到控制台。

程序使首先用URL对象定位和打开远程服务,并应用URL对象的openConnection()方法获取HttpURLConnection实例对象。然后应用HttpURLConnection实例对象分别设置远程服务的连接超时时间、服务响应超时时间、读取数据超时时间。再调用HttpURLConnection实例对象的connect()方法向远程服务发送请求,并调用HttpURLConnection实例对象的getResponseCode()方法判断远程服务是否响应成功,如果返回值是200,说明服务器响应成功。最后读取远程服务返回的数据,并将读取的数据输出到控制台。

程序执行结果如下图所示:                                        

image.png

代码在线纠错(通义千问 qwen-max)

支持粘贴多个代码文件,提交后由阿里云通义千问自动分析代码漏洞、语法错误、逻辑问题并给出修改建议。
您已解锁 AI 代码纠错功能,可正常使用!

评论区

登录 后发表评论
暂无评论