Java编程:发送HTTP请求到服务器

当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类,连接远程服务器,向服务器发送服务请求,并接收服务器的请求响应数据。
该远程服务提供求两数和服务,客户端向该服务发送服务请求,并向该服务提交两个待求和的整数,该服务返回求和结果。
在ip包下新建urlconnectiontest类。代码如下:
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;
public class urlconnectiontest {
public static void main(string[] args) {
httpurlconnection connection = null;
inputstream stream = null;
bufferedreader reader = null;
string server = “url&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,说明服务器响应成功。最后读取远程服务返回的数据,并将读取的数据输出到控制台。
程序执行结果如下图所示:

小米10 Pro获最佳音频性能得分榜单第一
怎样去设计一个圆柱形纳米棒组成的衍射超透镜呢
使用NVIDIA Jetson AGX Xavier部署新的自主机器
新日本无线新开发的高增益特性的GNSS两级LNA ”NJG1187”进入量产
苹果高管承认:iPhone 12无线充电器或将让部分卡片消磁
Java编程:发送HTTP请求到服务器
上海市智能制造特色产业园区推进大会今天举行
使用FPGA实现并/串转换电路
5G对互联网技术和金融创新的影响有多大
数字化转型对半导体和电子行业意味着什么
高光谱成像技术有哪些显著的优势?
机器学习算法概览:异常检测算法/常见算法/深度学习
全球平板销量下降,苹果仍第一,iPad pro让苹果非常头痛
PCB layout结合生产设计必须遵循那些六大原则
Nvidia掌门黄仁勋否认将进军x86 CPU市场
嘉宾“大咖”云集婺城 共商工业互联网发展大计
关于现代无线通信系统的研发趋势分析和应用
如何降低微控制器系统中的噪声影响(1)
双稳态继电器在结构上有什么优势
AL7激光体积重量测量仪设备