您的位置:首页 > 理论基础 > 计算机网络

java直接发送http的get和post请求

2015-08-26 10:40 645 查看
java原始包net中,有支持http的get和post的请求类。直接看代码

get请求:

public class httpTest {
public static void main(String[] args) {
new Runs().start();
}
static class  Runs extends Thread{
@Override
public void run() {
try {
URL url = new URL("http://www.9k9kh5.com:8080/BigMillionaire/H52/index.html");  //创建一个网络路径对象
URLConnection connection = url.openConnection();//打开网络路径对象中的链接。将返回一个URLConnection对象。
InputStream is = connection.getInputStream();//获取返回对象中的输入流
InputStreamReader isr = new InputStreamReader(is); //把流包装到字符输入流
BufferedReader br = new BufferedReader(isr);//包装到buff中
String line;
StringBuilder builder = new StringBuilder();
while((line = br.readLine())!=null){
builder.append(line);
}
br.close();
isr.close();
is.close();
System.out.println(builder.toString());
} catch (MalformedURLException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
} catch (IOException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
}
}


总结:向指定路径发送了请求,并将结果封装到URLConnection对象中,通过流将内容读出。

post请求;

public class HttpPost {
public static void main(String[] args) {
new RunPost().start();
}
}
class RunPost extends Thread{
@Override
public void run() {
try {
URL url = new URL("http://www.9k9kh5.com:8080/BigMillionaire/H52/index.html");
HttpURLConnection post = (HttpURLConnection) url.openConnection();//打开链接,并返回一个post对象
post.addRequestProperty("encoding", "utf-8");
post.setRequestMethod("POST"); //设置链接网络的方式为post
post.setDoInput(true);//可以从网络获取到数据。
post.setDoOutput(true);//可以传输数据到网络
//输出流
OutputStream os = post.getOutputStream();
OutputStreamWriter sw = new OutputStreamWriter(os);
BufferedWriter bw = new BufferedWriter(sw);
bw.write("userId=27&sign=965435ff254fbcffee25c0d2b7e92dc8");
bw.flush();//刷新(强制输出)
//输入流(输入流必须要先向网络发送数据结束后才可用)
InputStream is = post.getInputStream();
InputStreamReader rs = new InputStreamReader(is);
BufferedReader br = new BufferedReader(rs);
String line;
StringBuilder builder =new StringBuilder();
while((line=br.readLine())!=null){
builder.append(line);
}
System.out.println(builder.toString());
bw.close();
sw.close();
os.close();
br.close();
rs.close();
is.close();
} catch (MalformedURLException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
} catch (IOException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
}


总结:和get不同的是请求只有路径,参数是通过输出流传输的。通过post请求返回的对象是HttpURLConnection。其他和get相似。

利用第三方jar包。

第三方工具(apache的httpClient)

官网:hc.apache.org

httpcomponents-client-4.5-bin.zip\httpcomponents-client-4.5\lib (包名)

public class HttpClient {
public static void main(String[] args) {
new GetandPost ().start();
}
}
class GetandPost extends Thread{
CloseableHttpClient client = HttpClients.createDefault(); //创建出来对象
@Override
public void run() {
HttpPost post = new HttpPost("http://123.59.33.252:9999/tvData");//创建post请求对象
try {
List<BasicNameValuePair> list= new ArrayList<BasicNameValuePair>(); //创建参数集合
list.add(new BasicNameValuePair("TVname","27"));  //添加参数
post.setEntity(new UrlEncodedFormEntity(list,"UTF-8"));//把参数放入请求对象,,post发送的参数list,指定格式
CloseableHttpResponse response = client.execute(post);//启动执行请求,并获得返回值
HttpEntity entity = response.getEntity();//得到返回的entity对象
String result = EntityUtils.toString(entity, "UTF-8");//把实体对象转换为string
System.out.println(result);
} catch (UnsupportedEncodingException e1) {
// TODO 自动生成的 catch 块
e1.printStackTrace();
} catch (ClientProtocolException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
} catch (IOException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
//        HttpGet get = new HttpGet("http://www.9k9kh5.com:8080/BigMillionaire/H52/gerenzhongxin.html?userId=27&sign=965435ff254fbcffee25c0d2b7e92dc8");
//        try {
//            CloseableHttpResponse response = client.execute(get);
//            HttpEntity entity = response.getEntity();//
//            String result = EntityUtils.toString(entity, "UTF-8");
//            System.out.println(result);
//        } catch (ClientProtocolException e) {
//            // TODO 自动生成的 catch 块
//            e.printStackTrace();
//        } catch (IOException e) {
//            // TODO 自动生成的 catch 块
//            e.printStackTrace();
//        }
}
}


总结:第三方工具,少去了流的读写。总体运用简单易懂。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: