简单介绍Java网络编程中的HTTP请求
HTTP请求的细节——请求行
请求行中的GET称之为请求方式,请求方式有:POST、GET、HEAD、OPTIONS、DELETE、TRACE、PUT,常用的有:GET、POST
用户如果没有设置,默认情况下浏览器向服务器发送的都是get请求,例如在浏览器直接输地址访问,点超链接访问等都是get,用户如想把请求方式改为post,可通过更改表单的提交方式实现。
不管POST或GET,都用于向服务器请求某个WEB资源,这两种方式的区别主要表现在数据传递上:如果请求方式为GET方式,则可以在请求的URL地址后以?的形式带上交给服务器的数据,多个数据之间以&进行分隔,例如:GET/mail/1.html?name=abc&password=xyzHTTP/1.1
GET方式的特点:在URL地址后附带的参数是有限制的,其数据容量通常不能超过1K。
如果请求方式为POST方式,则可以在请求的实体内容中向服务器发送数据,Post方式的特点:传送的数据量无限制。
HTTP请求的细节——消息头
HTTP请求中的常用消息头
accept:浏览器通过这个头告诉服务器,它所支持的数据类型
Accept-Charset:浏览器通过这个头告诉服务器,它支持哪种字符集
Accept-Encoding:浏览器通过这个头告诉服务器,支持的压缩格式
Accept-Language:浏览器通过这个头告诉服务器,它的语言环境
Host:浏览器通过这个头告诉服务器,想访问哪台主机
If-Modified-Since:浏览器通过这个头告诉服务器,缓存数据的时间
Referer:浏览器通过这个头告诉服务器,客户机是哪个页面来的 防盗链
Connection:浏览器通过这个头告诉服务器,请求完后是断开链接还是何持链接
例:
http_get
importjava.io.FileOutputStream;
importjava.io.IOException;
importjava.io.InputStream;
importjava.net.HttpURLConnection;
importjava.net.MalformedURLException;
importjava.net.URL;
publicclassHttp_Get{
privatestaticStringURL_PATH="http://192.168.1.125:8080/myhttp/pro1.png";
publicHttp_Get(){
//TODOAuto-generatedconstructorstub
}
publicstaticvoidsaveImageToDisk(){
InputStreaminputStream=getInputStream();
byte[]data=newbyte[1024];
intlen=0;
FileOutputStreamfileOutputStream=null;
try{
fileOutputStream=newFileOutputStream("C:\\test.png");
while((len=inputStream.read(data))!=-1){
fileOutputStream.write(data,0,len);
}
}catch(IOExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}finally{
if(inputStream!=null){
try{
inputStream.close();
}catch(IOExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
if(fileOutputStream!=null){
try{
fileOutputStream.close();
}catch(IOExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
}
}
/**
*获得服务器端的数据,以InputStream形式返回
*@return
*/
publicstaticInputStreamgetInputStream(){
InputStreaminputStream=null;
HttpURLConnectionhttpURLConnection=null;
try{
URLurl=newURL(URL_PATH);
if(url!=null){
httpURLConnection=(HttpURLConnection)url.openConnection();
//设置连接网络的超时时间
httpURLConnection.setConnectTimeout(3000);
httpURLConnection.setDoInput(true);
//表示设置本次http请求使用GET方式请求
httpURLConnection.setRequestMethod("GET");
intresponseCode=httpURLConnection.getResponseCode();
if(responseCode==200){
//从服务器获得一个输入流
inputStream=httpURLConnection.getInputStream();
}
}
}catch(MalformedURLExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}catch(IOExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
returninputStream;
}
publicstaticvoidmain(String[]args){
//从服务器获得图片保存到本地
saveImageToDisk();
}
}
Http_Post
importjava.io.ByteArrayOutputStream;
importjava.io.IOException;
importjava.io.InputStream;
importjava.io.OutputStream;
importjava.io.UnsupportedEncodingException;
importjava.net.HttpURLConnection;
importjava.net.MalformedURLException;
importjava.net.URL;
importjava.net.URLEncoder;
importjava.util.HashMap;
importjava.util.Map;
publicclassHttp_Post{
//请求服务器端的url
privatestaticStringPATH="http://192.168.1.125:8080/myhttp/servlet/LoginAction";
privatestaticURLurl;
publicHttp_Post(){
//TODOAuto-generatedconstructorstub
}
static{
try{
url=newURL(PATH);
}catch(MalformedURLExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
/**
*@paramparams
*填写的url的参数
*@paramencode
*字节编码
*@return
*/
publicstaticStringsendPostMessage(Map<String,String>params,
Stringencode){
//作为StringBuffer初始化的字符串
StringBufferbuffer=newStringBuffer();
try{
if(params!=null&&!params.isEmpty()){
for(Map.Entry<String,String>entry:params.entrySet()){
//完成转码操作
buffer.append(entry.getKey()).append("=").append(
URLEncoder.encode(entry.getValue(),encode))
.append("&");
}
buffer.deleteCharAt(buffer.length()-1);
}
//System.out.println(buffer.toString());
//删除掉最有一个&
System.out.println("-->>"+buffer.toString());
HttpURLConnectionurlConnection=(HttpURLConnection)url
.openConnection();
urlConnection.setConnectTimeout(3000);
urlConnection.setRequestMethod("POST");
urlConnection.setDoInput(true);//表示从服务器获取数据
urlConnection.setDoOutput(true);//表示向服务器写数据
//获得上传信息的字节大小以及长度
byte[]mydata=buffer.toString().getBytes();
//表示设置请求体的类型是文本类型
urlConnection.setRequestProperty("Content-Type",
"application/x-www-form-urlencoded");
urlConnection.setRequestProperty("Content-Length",
String.valueOf(mydata.length));
//获得输出流,向服务器输出数据
OutputStreamoutputStream=urlConnection.getOutputStream();
outputStream.write(mydata,0,mydata.length);
outputStream.close();
//获得服务器响应的结果和状态码
intresponseCode=urlConnection.getResponseCode();
if(responseCode==200){
returnchangeInputStream(urlConnection.getInputStream(),encode);
}
}catch(UnsupportedEncodingExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}catch(IOExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
return"";
}
/**
*将一个输入流转换成指定编码的字符串
*
*@paraminputStream
*@paramencode
*@return
*/
privatestaticStringchangeInputStream(InputStreaminputStream,
Stringencode){
//TODOAuto-generatedmethodstub
ByteArrayOutputStreamoutputStream=newByteArrayOutputStream();
byte[]data=newbyte[1024];
intlen=0;
Stringresult="";
if(inputStream!=null){
try{
while((len=inputStream.read(data))!=-1){
outputStream.write(data,0,len);
}
result=newString(outputStream.toByteArray(),encode);
}catch(IOExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
returnresult;
}
/**
*@paramargs
*/
publicstaticvoidmain(String[]args){
//TODOAuto-generatedmethodstub
Map<String,String>params=newHashMap<String,String>();
params.put("username","admin");
params.put("password","123");
Stringresult=Http_Post.sendPostMessage(params,"utf-8");
System.out.println("--result->>"+result);
}
}