Java中通过方法创建一个http连接并请求

Posted Qiao_Zhi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java中通过方法创建一个http连接并请求相关的知识,希望对你有一定的参考价值。

1.Java代码创建一个连接并请求该连接返回的数据

 

doGet()方法,execute()方法中调用
package demo2.x.com;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

import javax.print.attribute.standard.RequestingUserName;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;

/**
 * Demo2主页,访问主页要先验证cookie
 * 
 * @author: qlq
 * @date : 2017年8月29日下午12:02:31
 */
public class Demo2Action extends ActionSupport {

    private String gotoUrl;

    public String getGotoUrl() {
        return gotoUrl;
    }

    public void setGotoUrl(String gotoUrl) {
        this.gotoUrl = gotoUrl;
    }

    @Override
    public String execute() throws Exception {
        HttpServletRequest request = ServletActionContext.getRequest();
        Cookie cookies[] = request.getCookies();
        if (cookies != null) {
            for (Cookie cookie : cookies) {
                if ("ssocookie".equals(cookie.getName())) {
                    String result = this.doGet("http://check.x.com:8080/sso/checkCookie.action", cookie.getName(),
                            cookie.getValue());
                    if ("1".equals(result)) {
                        return SUCCESS;
                    }
                }
            }
        }
        // 登陆失败后将gotoUrl写到JSP页面
        gotoUrl = "http://demo2.x.com:8080/demo2/main.action";
        return LOGIN;
    }

    public String doGet(String url, String cookieName, String cookieValue) {
        // 用于接收返回的数据
        StringBuffer sb = new StringBuffer();
        // 创建一个连接的请求
        HttpURLConnection httpURLConnection = null;
        try {
            // 包装请求的地址
            URL urls = new URL(url + "?cookieName=" + cookieName + "&cookieValue=" + cookieValue);
            // 打开连接
            httpURLConnection = (HttpURLConnection) urls.openConnection();
            httpURLConnection.setRequestMethod("GET");
            // 通过BufferReader读取数据
            InputStream iStream = httpURLConnection.getInputStream();
            InputStreamReader inputStreamReader = new InputStreamReader(iStream);
            BufferedReader bReader = new BufferedReader(inputStreamReader);
            String temp = null;
            while ((temp = bReader.readLine()) != null) {
                sb.append(temp);
            }
            // 关闭流(先开后关,后开先关)
            bReader.close();
            inputStreamReader.close();
            iStream.close();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {

            if (httpURLConnection != null) {
                // 关闭连接
                httpURLConnection.disconnect();
            }
        }
        return sb.toString();
    }

}

 

 

 

2.接收请求的连接

 

checkCookie()方法

package check.x.com;

import java.awt.image.VolatileImage;
import java.io.IOException;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;
import com.sun.org.apache.bcel.internal.generic.IF_ACMPEQ;

import check.x.com.utils.CheckCookie;

public class LoginAction extends ActionSupport {

    private String username;
    private String password;
    private String gotoUrl;
    private String cookieName;
    private String cookieValue;

    public String getCookieName() {
        return cookieName;
    }

    public void setCookieName(String cookieName) {
        this.cookieName = cookieName;
    }

    public String getCookieValue() {
        return cookieValue;
    }

    public void setCookieValue(String cookieValue) {
        this.cookieValue = cookieValue;
    }

    public String getGotoUrl() {
        return gotoUrl;
    }

    public void setGotoUrl(String gotoUrl) {
        this.gotoUrl = gotoUrl;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @Override
    public String execute() throws Exception {
        boolean OK = this.check();
        if (OK) {
            Cookie cookie = new Cookie("ssocookie", "sso");
            // 设置cookie的作用范围是父域(.x.com)
            cookie.setDomain(".x.com");
            // 斜杠代表设置到父域的顶层,也就是父域下的所有应用都可访问
            cookie.setPath("/");
            HttpServletResponse response = ServletActionContext.getResponse();
            // 增加cookie,未设置生命周期默认为一次会话
            response.addCookie(cookie);
            return SUCCESS;
        }
        return null;
    }
    
    
    public void checkCookie() throws IOException{
        String result="0";
        if(CheckCookie.checkCookie(cookieName, cookieValue)){
            result="1";
        }
        HttpServletResponse response = ServletActionContext.getResponse();
        response.getWriter().print(result);
        response.getWriter().close();
    }

    public boolean check() {
        if ("user".equals(username) && "123".equals(password))
            return true;
        return false;
    }

}

 

以上是关于Java中通过方法创建一个http连接并请求的主要内容,如果未能解决你的问题,请参考以下文章

在iOS中通过GET方法发送http请求,如果参数中有中文或者空格的时候应该怎么办?

如何在 Go 中通过 http:// 发出仅 HTTP2 的请求?

java使用jdbc连接数据库步骤

在 iOS 中通过网络连接逐渐播放 WAV 文件

如何在 Django 中通过 PUT 请求处理文件上传?

我可以在 Swift 中通过 NSURLSession 以某种方式执行同步 HTTP 请求吗