java实现http的Post、Get、代理访问请求

本文实例讲解了java实现http的Post、Get、代理访问请求的详细代码片段,分享给大家供大家参考,具体内容如下

package com.snowfigure.kits.net;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.InetSocketAddress;
import java.net.Proxy;
import java.net.URL;
import java.net.URLConnection;
import java.util.List;
import java.util.Map;

/**
 * Http请求工具类
 * @author snowfigure
 * @since 2014-8-24 13:30:56
 * @version v1.0.1
 */
public class HttpRequestUtil {
  static boolean proxySet = false;
  static String proxyHost = "127.0.0.1";
  static int proxyPort = 8087;
  /**
   * 编码
   * @param source
   * @return
   */
  public static String urlEncode(String source,String encode) {
    String result = source;
    try {
      result = java.net.URLEncoder.encode(source,encode);
    } catch (UnsupportedEncodingException e) {
      e.printStackTrace();
      return "0";
    }
    return result;
  }
  public static String urlEncodeGBK(String source) {
    String result = source;
    try {
      result = java.net.URLEncoder.encode(source,"GBK");
    } catch (UnsupportedEncodingException e) {
      e.printStackTrace();
      return "0";
    }
    return result;
  }
  /**
   * 发起http请求获取返回结果
   * @param req_url 请求地址
   * @return
   */
  public static String httpRequest(String req_url) {
    StringBuffer buffer = new StringBuffer();
    try {
      URL url = new URL(req_url);
      HttpURLConnection httpUrlConn = (HttpURLConnection) url.openConnection(); 

      httpUrlConn.setDoOutput(false);
      httpUrlConn.setDoInput(true);
      httpUrlConn.setUseCaches(false); 

      httpUrlConn.setRequestMethod("GET");
      httpUrlConn.connect(); 

      // 将返回的输入流转换成字符串
      InputStream inputStream = httpUrlConn.getInputStream();
      InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf-8");
      BufferedReader bufferedReader = new BufferedReader(inputStreamReader); 

      String str = null;
      while ((str = bufferedReader.readLine()) != null) {
        buffer.append(str);
      }
      bufferedReader.close();
      inputStreamReader.close();
      // 释放资源
      inputStream.close();
      inputStream = null;
      httpUrlConn.disconnect(); 

    } catch (Exception e) {
      System.out.println(e.getStackTrace());
    }
    return buffer.toString();
  } 

  /**
   * 发送http请求取得返回的输入流
   * @param requestUrl 请求地址
   * @return InputStream
   */
  public static InputStream httpRequestIO(String requestUrl) {
    InputStream inputStream = null;
    try {
      URL url = new URL(requestUrl);
      HttpURLConnection httpUrlConn = (HttpURLConnection) url.openConnection();
      httpUrlConn.setDoInput(true);
      httpUrlConn.setRequestMethod("GET");
      httpUrlConn.connect();
      // 获得返回的输入流
      inputStream = httpUrlConn.getInputStream();
    } catch (Exception e) {
      e.printStackTrace();
    }
    return inputStream;
  }

  /**
   * 向指定URL发送GET方法的请求
   *
   * @param url
   *      发送请求的URL
   * @param param
   *      请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
   * @return URL 所代表远程资源的响应结果
   */
  public static String sendGet(String url, String param) {
    String result = "";
    BufferedReader in = null;
    try {
      String urlNameString = url + "?" + param;
      URL realUrl = new URL(urlNameString);
      // 打开和URL之间的连接
      URLConnection connection = realUrl.openConnection();
      // 设置通用的请求属性
      connection.setRequestProperty("accept", "*/*");
      connection.setRequestProperty("connection", "Keep-Alive");
      connection.setRequestProperty("user-agent",
          "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
      // 建立实际的连接
      connection.connect();
      // 获取所有响应头字段
      Map<String, List<String>> map = connection.getHeaderFields();
      // 遍历所有的响应头字段
      for (String key : map.keySet()) {
        System.out.println(key + "--->" + map.get(key));
      }
      // 定义 BufferedReader输入流来读取URL的响应
      in = new BufferedReader(new InputStreamReader(
          connection.getInputStream()));
      String line;
      while ((line = in.readLine()) != null) {
        result += line;
      }
    } catch (Exception e) {
      System.out.println("发送GET请求出现异常!" + e);
      e.printStackTrace();
    }
    // 使用finally块来关闭输入流
    finally {
      try {
        if (in != null) {
          in.close();
        }
      } catch (Exception e2) {
        e2.printStackTrace();
      }
    }
    return result;
  }

  /**
   * 向指定 URL 发送POST方法的请求
   *
   * @param url
   *      发送请求的 URL
   * @param param
   *      请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
   * @param isproxy
   *        是否使用代理模式
   * @return 所代表远程资源的响应结果
   */
  public static String sendPost(String url, String param,boolean isproxy) {
    OutputStreamWriter out = null;
    BufferedReader in = null;
    String result = "";
    try {
      URL realUrl = new URL(url);
      HttpURLConnection conn = null;
      if(isproxy){//使用代理模式
        @SuppressWarnings("static-access")
        Proxy proxy = new Proxy(Proxy.Type.DIRECT.HTTP, new InetSocketAddress(proxyHost, proxyPort));
        conn = (HttpURLConnection) realUrl.openConnection(proxy);
      }else{
        conn = (HttpURLConnection) realUrl.openConnection();
      }
      // 打开和URL之间的连接

      // 发送POST请求必须设置如下两行
      conn.setDoOutput(true);
      conn.setDoInput(true);
      conn.setRequestMethod("POST");  // POST方法

      // 设置通用的请求属性

      conn.setRequestProperty("accept", "*/*");
      conn.setRequestProperty("connection", "Keep-Alive");
      conn.setRequestProperty("user-agent",
          "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
      conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");

      conn.connect();

      // 获取URLConnection对象对应的输出流
      out = new OutputStreamWriter(conn.getOutputStream(), "UTF-8");
      // 发送请求参数
      out.write(param);
      // flush输出流的缓冲
      out.flush();
      // 定义BufferedReader输入流来读取URL的响应
      in = new BufferedReader(
          new InputStreamReader(conn.getInputStream()));
      String line;
      while ((line = in.readLine()) != null) {
        result += line;
      }
    } catch (Exception e) {
      System.out.println("发送 POST 请求出现异常!"+e);
      e.printStackTrace();
    }
    //使用finally块来关闭输出流、输入流
    finally{
      try{
        if(out!=null){
          out.close();
        }
        if(in!=null){
          in.close();
        }
      }
      catch(IOException ex){
        ex.printStackTrace();
      }
    }
    return result;
  }  

  public static void main(String[] args) {
    //demo:代理访问
    String url = "http://api.adf.ly/api.php";
    String para = "key=youkeyid&youuid=uid&advert_type=int&domain=adf.ly&url=http://somewebsite.com";

    String sr=HttpRequestUtil.sendPost(url,para,true);
    System.out.println(sr);
  }

}

希望本文所述对大家学习java程序设计有所帮助。

(0)

相关推荐

  • HTTP中get和post的区别详解

    Http定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET,POST,PUT,DELETE.URL全称是资源描述符,我们可以这样认为:一个URL地址,它用于描述一个网络上的资源,而HTTP中的GET,POST,PUT,DELETE就对应着对这个资源的查,改,增,删4个操作.到这里,大家应该有个大概的了解了,GET一般用于获取/查询资源信息,而POST一般用于更新资源信息. 1.根据HTTP规范,GET用于信息获取,而且应该是安全的和幂等的. (1).所谓安全的意味着该操作用于获取信息

  • java使用httpclient模拟post请求和get请求示例

    复制代码 代码如下: import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader; import org.apache.commons.httpclient.DefaultHttpMethodRetryHandler;import org.apache.commons.httpclient.Header;import org

  • java模拟http的Get/Post请求,并设置ip与port代理的方法

    本文涉及3个基本点: 1.因为很多公司的内网都设有代理,浏览器通过ip与port上网,而java代码模拟http get方式同样需要外网代理: 2.Java实现http的Get/Post请求代码: 3.主要是设置HttpURLConnection请求头里面的属性 比如Cookie.User-Agent(浏览器类型)等等. 比如:http请求中添加Header conn.setRequestProperty("Authorization", authorization); 注:我就在网上

  • java发送http的get、post请求实现代码

    Http请求类 package wzh.Http; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.URL; import java.net.URLConnection; import java.util.List; import java.util.Map; public

  • Java模拟HTTP Get Post请求 轻松实现校园BBS自动回帖

    本文实例为大家分享了Java模拟HTTP Get Post请求,校园BBS自动回帖功能,供大家参考,具体内容如下 设计思路 找到帖子链接的集合,最后面数字变化, 就可以得到不同的帖子 防止帖子发表会又被删了的情况, 进行判断帖子是否存在 遍历这个集合, 对每个链接做回帖的POST请求 重难点 Note: 回帖需要用户登录信息 一种是利用Cookie 另一种是进行模拟登录 本文采用前者 代码 代码比较简单,注意事项是找到自己的Cookie,赋给String yourCookeie就可以直接运行 主

  • Java模拟HTTP Get Post请求实现论坛自动回帖功能

    最近想自动发帖回帖,拿某论坛试验了一下,发现可行,不过后续没有再使用,以免影响论坛正常运行. 1.帖子链接的格式为 http://bbs.***.***.**/forum.php?mod=viewthread&tid=774210 最后面774210数字变化, 就可以得到不同的帖子 2.防止帖子发表会又被删了的情况, 进行判断帖子是否存在 3.递增后面的 id 数字, 对每个链接做回帖的 POST 请求 重难点 回帖需要用户登录信息 一种是利用Cookie 另一种是进行模拟登录 本文采用前者 判

  • java实现http的Post、Get、代理访问请求

    本文实例讲解了java实现http的Post.Get.代理访问请求的详细代码片段,分享给大家供大家参考,具体内容如下 package com.snowfigure.kits.net; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStreamWriter; im

  • Java中的引用和动态代理的实现详解

    我们知道,动态代理(这里指JDK的动态代理)与静态代理的区别在于,其真实的代理类是动态生成的.但具体是怎么生成,生成的代理类包含了哪些内容,以什么形式存在,它为什么一定要以接口为基础? 如果去看动态代理的源代码(java.lang.reflect.Proxy),会发现其原理很简单(真正二进制类文件的生成是在本地方法中完成,源代码中没有),但其中用到了一个缓冲类java.lang.reflect.WeakCache<ClassLoader,Class<?>[],Class<?>

  • 通过nginx代理拦截请求进行全局访问限制

    本文介绍了通过nginx代理拦截请求进行全局访问限制,分享给大家,具体如下: 运行环境: Ubantu 14.0 tomcat7 nginx 1.4.6(更新后1.5.6) 项目中经常会用到权限管理,必然的就会存在权限的设定和验证:对于登陆或者模块的权限设定验证,在项目中直接实现:那么问题出现了 1.访问资源文件 2.多项目访问权限 3.tomcat中虚拟目录的访问权限 公司项目中用到文件的上传下载,在线预览等功能:当然用户在使用的时候,我们不可能把用户的上传的文件放在项目中,那么必然会用到 虚

  • Java实现多线程中的静态代理模式

    前言 代理模式是一种设计模式,提供了对目标对象额外的访问方式,即通过代理对象访问目标对象,这样可以在不修改原目标对象的前提下,提供额外的功能操作,扩展目标对象的功能. 简言之,代理模式就是设置一个中间代理来控制访问原目标对象,以达到增强原对象的功能和简化访问方式. 静态代理属于设计模式中的代理模式.反之则有动态代理,本篇文章不展开讲,有兴趣的可自行谷歌研究研究. 其实继承Thread也属于静态代理的一种,所以在这里学习静态代理有助于我们学习多线程. 静态代理 优点:可以在不修改目标对象的前提下扩

  • java 使用JDBC构建简单的数据访问层实例详解

    本教程的目的是使用Java编写的分离的层去访问数据库中的表,这一层通常称为数据访问层(DAL) 使用DAL的最大好处是通过直接使用一些类似insert()和find()的方法简化了数据库的访问操作,而不是总是先做链接,再执行一些查询. 该层在其内部处理所有与数据库相关的调用和查询. 创建数据库 我们希望为用户创造一个简单的表,我们可以使用这些字段来创建 id        int name      varchar(200) password  varchar(200) age       in

  • 如何阻止网站被恶意反向代理访问(防网站镜像)

    什么是反向代理? 先说说正向代理的概念: 正向代理,也就是传说中的代理,他的工作原理就像一个跳板.简单的说,我是一个用户,我访问不了某网站,但是我能访问一个代理服务器.这个代理服务器呢,他能访问那个我不能访问的网站,于是我先连上代理服务器,告诉他我需要那个无法访问网站的内容,代理服务器去取回来,然后返回给我.从网站的角度,只在代理服务器来取内容的时候有一次记录,有时候并不知道是用户的请求,也隐藏了用户的资料,这取决于代理告不告诉网站. 结论就是,正向代理是一个位于客户端和原始服务器(origin

  • 基于Java中对域和静态方法的访问不具有多态性(实例讲解)

    1.将方法调用同方法主体关联起来被称为 2.编译期绑定(静态)是在程序编译阶段就确定了引用对象的类型 3.运行期绑定(动态绑定)是指在执行期间判断所引用对象的实际类型,根据其实际的类型调用其相应的方法 4.除了static方法和final方法(private方法属于final方法),其他所有方法都是后期绑定,Java中所有的方法都是通过动态绑定来实现多态 5.访问某个域的行为不具有多态性 package polymorphism; class SuperField { public int fi

  • Node 代理访问的实现

    NODE代理访问 1. 场景 本地开发,代理访问,防止跨域(一般通过webpack配置代理即可),特殊情况如携带一些自定义的登录cookie则需要通过自己写node 作为一种server中间层,单线程异步可以缓解服务器压力.长链接websocket通常使用node搭建 2. 技术框架 node - koa2 体量小,轻便易用. 路由koa-router koa配套路由,中间件支持async koa2-request 基于async对 request的封装,这里本人git上找的,可靠性带考量,若基

  • vue项目打包部署_nginx代理访问方法详解

    我又来了,今天部署了下vue项目,使用nginx做了代理,这样可以解决跨域的问题,这里做一个简单讲解. 1.先看vue项目打包(我这里使用的是vscode开发工具) 这里是我的项目结构: 打包之前需要修改如下配置文件: 配置文件一:build>>utils.js (修改publicPath:"../../" , 这样写是处理打包后找不到静态文件的问题) 配置文件二:config>>index.js(修改assetsPublicPath:'./' ,修改目的是为了

  • Java使用JDK与Cglib动态代理技术统一管理日志记录

    Java中动态代理主要有JDK和CGLIB两种方式. 区别主要是jdk是代理接口,而cglib是代理类. 优点:这种方式已经解决我们前面所有日记需要的问题.非常的灵活.而且可以方便的在后期进行维护和升级. 缺点:当然使用jdk动态代理,必需要有接口.如果没有接口.就无法使用jdk动态代理技术. 计算接口 Calculate.java public interface Calculate { /** * 加法运算 * @param num1 参数 1 * @param num2 参数 2 * @r

随机推荐