创建一个服务器程序,用来接收和返回数据:
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println(request.getMethod()); //获取请求方式 System.out.println(request.getHeader("referer")); //获取请求页面 System.out.println(request.getParameter("name")); //获取参数 response.getOutputStream().write("Hello".getBytes()); //向浏览器回送数据 } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); }接下来,再创建一个Java程序向这个服务器程序发送请求,类 HttpURLConnection提供方法获取和发送请求数据.但是构造方法
protected HttpURLConnection(URL u)
表明我们不能直接创建这个对象,也没有任何静态方法能够返回这个对象.于是我们需要绕一把..先获得 URL对象,再利用openConnection()返回HttpURLConnection对象:
public void sendHttp() throws IOException{ URL url = new URL("http://localhost:8080/ImitateRequest/servlet/servlet"); //设置要访问的链接 HttpURLConnection conn = (HttpURLConnection) url.openConnection(); //获取HttpURLConnection的对象 conn.setDoOutput(true); //默认值为false,不能传递参数 conn.setRequestMethod("POST"); //设置请求方式 conn.setRequestProperty("referer", "http://www.sina.com/index.html"); OutputStream out = conn.getOutputStream(); out.write("name=aaaa".getBytes()); //向服务器发送一个值为"aaaa"的name参数,如果conn的DoOutput属性值为false,此处将抛出异常 conn.getResponseCode(); //获取响应状态码 }以上是发送一次请求需要掌握的方法,接下来是读取一次请求:
public void readHttp() throws IOException{ URL url = new URL("http://localhost:8080/ImitateRequest/servlet/servlet"); //设置请求的链接 HttpURLConnection conn = (HttpURLConnection) url.openConnection(); System.out.println(conn.getResponseCode()); //查看响应状态码 System.out.println(conn.getHeaderField("Content-Length")); //响应文本内容的长度 InputStream in = conn.getInputStream(); //获取一个和服务器返回的内容相关联的流 try{ int len = 0; byte[] buffer = new byte[1024]; while((len = in.read(buffer))>0){ System.out.println(new String(buffer,0,len)); //输出到控制台 } }finally{ if(in!=null) try{ in.close(); }catch(Exception e){ } } }常用的一些HTTP协议请求头:
Request
GET /h.gif?pid=113&monkey=cool HTTP/1.1
请求方式 请求路径 请求版本
Accept
image/png, image/svg+xml, image/*;q=0.8, */*;q=0.5
浏览器可接收的类型
Referer
http://hao123.com/
来源路径
Accept-Language
zh-CN
浏览器可以接收的语言
User-Agent
Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)
浏览器的厂商信息
Content-Type
text/html; charset=UTF-8
数据的内容类型
Accept-Encoding
gzip, deflate
浏览器可以接收压缩后的数据
Host
nsclick.baidu.com
请求的主机IP和端口号
Content-Length
289
用于指定数据的总长度
Connection
Keep-Alive
维持一个活动连接
Cache-Control
no-cache
缓存情况
Cookie
BAIDUID=304614CF0781D6FABA00280E60983AF5:FG=1
COOKIE
