Java实现Http的Post、Get、代理访问请求

Java实现Http的访问请求。包含基本的Get访问、Post访问。Post包含使用代理模式访问

package com.nit.utils;

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请求工具类
 */
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);
    }

}
时间: 2024-08-31 15:20:44

Java实现Http的Post、Get、代理访问请求的相关文章

java连接mysql,mysql需要代理访问外网

问题描述 java连接mysql,mysql需要代理访问外网 现在mysql数据库所在的服务器需要通过https代理连接互联网,我在互联网上的java端如何连接到该mysql数据库呢!求大神告知 解决方案 如果你的是服务端程序,可以直接将程序和mysql放在同一服务器上 解决方案二: 参考MySQL Connect via proxy in JavaJDBC Connection via HTTPS ProxyConnect to MySQL using JDBC driver through

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

本文实例讲解了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

如何编写可通过代理访问因特网上的Web服务器的Java应用程序

本技巧将向您讲述如何编写可通过代理访问因特网上的Web服务器的Java应用程序.在Java应用程序中加入代理支持只需额外编写几行代码,且不依赖任何安全性"漏洞". 几乎所有的公司都十分关注保护自己的内部网络,以防黑客及入窃者.一种常见的安全措施是完全断开与因特网的连接.如果黑客们不能连接到您的任何一台机器,他们就不能非法进入您的系统.这种策略产生的不利副作用是,内部用户无法访问外部的因特网服务器,如Yahoo或JavaWorld.为了解决这一问题,网络管理员通常安装"代理服务

虚拟机-如何将java Web项目设置 nginx反向代理

问题描述 如何将java Web项目设置 nginx反向代理 操作系统 : cent Os 7 虚拟机上用tomcat跑了一个web项目,端口8001 虚拟机IP:192.168.168.144 在主机上可以通过 192.168.168.144:8001/web访问该项目. 请教如何配置nginx , 可以实现在 主机上 通过 www.mywebtest.com访问到该web项目? 呃,自己搞了半天.nginx都启不起来.. 配置文件如下: user nginx; worker_processe

内网探测脚本&amp;简单代理访问 jsp/php 源码分享

php内网探测脚本&简单代理访问       .. 1.直接访问默认扫描当前IP的C段,获取标题.web容器. 2.可以自定义传入需要扫描的段,传入参数ip即可 3.代理访问参数为url,可简单的访问内网的web,对了,我还加载了网站里的css,做到尽量看上去和直接访问的效果一样 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>  <

Outlook 2010中邮件授权代理访问的问题

同事要实现这个功能:当老板收到Meeting Request时,秘书也会收到一份,并允许秘书替老板接受或者拒绝这个会议. 解决方案:启用代理访问来实现 步骤:Outlook 2010 --> File -->Info--> Account Settings-->Delegate Access,赋予需要的权限即可 这个功能在Exchange上授权,需要manager才有权限做这个动作. 微软解决方案:http://office.microsoft.com/zh-cn/help/all

JAVA基础培训(3),认识类的访问权限描述符

我们熟悉一下类的访问权限描述符,public和默认不写的情况. 类没有private类型 . 我们先注意一下目录结构,我们建了一个otherpackage子目录,用来存放非同一目录 的类 先看我们的主文件 lession3/Lession3.java package lession3; // 注意,我们使用了其它package的类,所以需要import进来 // 注意:路径必须为完整的路径 import lession3.otherpackage.PublicClassOtherPackage;

如何阻止网站被恶意反向代理访问

 最近有人用小站数据,利用反向代理技术,做了个小偷站.用户访问的是他的网址,但实质上内容数据确是我的,这是一起恶意反向代理事件 什么是反向代理?    先说说正向代理的概念:    正向代理,也就是传说中的代理,他的工作原理就像一个跳板.简单的说,我是一个用户,我访问不了某网站,但是我能访问一个代理服务器.这个代理服务器呢,他能访问那个我不能访问的网站,于是我先连上代理服务器,告诉他我需要那个无法访问网站的内容,代理服务器去取回来,然后返回给我.从网站的角度,只在代理服务器来取内容的时候有一次记

linux中配置Nginx 拒绝代理访问

  先大概说说简单的结构-前端一个Nginx反向代理,后端一个Nginx instance app for PHP-实际上就是个Discuz,之前面对CC攻击都是预警脚本或者走CDN,但是这次攻击者不再打流量,而是针对数据库请求页面进行攻击,如search操作-帖子ID F5等..从日志分析来看是从3个URL着手攻击的,当时使用Nginx 匹配$query_string 来return 503-不过会导致页面不能访问,所以想到这么一个折中的办法. 首先你看一段代理请求的日志: ##通过分析,在后