`
xly1981
  • 浏览: 147150 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

URL对象连接url并获取值

    博客分类:
  • java
阅读更多
新老系统同时运行,在请求发往新系统时,通过filter方式吧request中的参数转发到老系统中,老系统返回的页面中的token被找出并保留,在提交form并再转发到老系统时重新写入。
import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.UnknownHostException;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class ConnectUrlTool {
private HttpServletRequest request;
private HttpServletResponse response;
private HttpURLConnection urlconn;
private String address;
private int timeOut=3000000;
private String sessionId;
private String tokenId;
private String params;


public ConnectUrlTool(){

}

public void setInfo(HttpServletRequest request,HttpServletResponse response,boolean addToken){
this.request=request;
this.response=response;
ParamTools paramTools = new ParamTools();
    paramTools.initParam(request);
      if(!addToken){
      this.tokenId=null;
      }
      else if(null!=this.tokenId && addToken){
      paramTools.addParam("org.apache.struts.taglib.html.TOKEN", this.tokenId);
      }
    this.params=paramTools.getUrlValue();
}


/**
* 发送参数params (like a=ds&b=asd&),地址为:address(like http://www.sina.com.cn)
* @param address
* @throws IOException
*/
public void sendToOld(String address)throws IOException{
this.address=address;
BufferedInputStream   bis =sendRequest(params);
byte[] buffer = new byte[8092];
StringBuffer sb=new StringBuffer("");
int bytesRead = 0;
    while ((bytesRead = bis.read(buffer)) != -1) {
      String chunk = new String(buffer, 0, bytesRead);
//       System.out.print(chunk);
      sb.append(chunk);
    }
getTokenId(sb.toString(),"org.apache.struts.taglib.html.TOKEN");
if(bis!=null)
   {
   bis.close(); 
   }
   urlconn.disconnect();
}
/**
* 返回的数据在BufferedInputStream
* @param params
* @return
* @throws IOException
*/
private BufferedInputStream sendRequest(String params) throws IOException
{
URL url = new URL(address);    
urlconn= this.getHttpConnect(address);
urlconn.setDoOutput(true);  
urlconn.setRequestMethod("POST");
urlconn.connect();
BufferedInputStream   bis   =   null;    
OutputStream os = urlconn.getOutputStream();     
os.write(params.toString().getBytes("utf-8"));     
os.flush();
os.close();  
int   code   =   urlconn.getResponseCode();
System.out.println("error   code   "+   code);
    if(code == HttpURLConnection.HTTP_OK)  
    {  
       bis = new BufferedInputStream(urlconn.getInputStream()); 
}
    return bis;
}
/**
* 创建连接对象
* @param url
* @return
* @throws UnknownHostException
*/
private HttpURLConnection getHttpConnect(String url) throws UnknownHostException
{
try
{
urlconn = (HttpURLConnection)new URL(url).openConnection();
urlconn.setConnectTimeout(timeOut);
urlconn.setReadTimeout(timeOut);
}
catch (MalformedURLException e)
{
e.printStackTrace();

}
catch (IOException e)
{
e.printStackTrace();
}
if (urlconn == null)
throw new UnknownHostException();

return urlconn;
}
/**
* 从返回的页面中找到input 的name对应的value的值
* @param str
* @param name
*/
private  void getTokenId(String str,String name){
String tokenId="";
String[] splitStr=str.split("<");
boolean find=false;
for(int i=0;i<splitStr.length;i++){
delKg(splitStr[i]);
String[] temp=splitStr[i].split(" ");
int len=0;
if(temp[0].equalsIgnoreCase("input")){
for(int j=0;j<temp.length;j++){
String[] temp1=temp[j].split("=");
for(int k=0;k<temp1.length;k++){
if(temp1[0].length()==4 && temp1[0].substring(0, 4).equalsIgnoreCase("name")){
String[] temp2=temp1[1].split("\"");
if(temp2[1].equalsIgnoreCase(name)){
len=i;
}
}
if(len==i)break;
}
if(len==i)break;
}
if(len==0)continue;
for(int j=0;j<temp.length;j++){
String[] temp1=temp[j].split("=");
for(int k=0;k<temp1.length;k++){
if(temp1[0].length()==5 && temp1[0].substring(0, 5).equalsIgnoreCase("value")){
String[] temp2=temp1[1].split("\"");
this.tokenId=temp2[1];
break;
}
}
}
if(len==i)break;
}
}
}

private  String delKg(String  a){
    a = a.trim();
    while(a.startsWith(" ")){
       a = a.substring(1,a.length()).trim();
    }
    while(a.endsWith(" ")){
       a = a.substring(0,a.length()-1).trim();
    }
    return a;
  }
}
分享到:
评论

相关推荐

    JavaScript获取链接url参数并生成对象

    标题"JavaScript获取链接url参数并生成对象"指出了我们需要从URL中提取这些参数,并将它们组织成一个JavaScript对象。这个对象的键将是参数名,值将是对应的参数值。这样做可以方便地对参数进行操作,如遍历、修改或...

    JAVA验证URL是否有效连接的方法

    - 使用`new URL(url)`创建一个URL对象,然后调用`openConnection()`方法打开到该URL的连接。 - `getResponseCode()`方法获取HTTP响应的状态码,200表示请求成功。 3. **重试机制**: ```java int counts = 0; ...

    JAVA中三种URL连接方法

    通过`URL`类,我们可以创建一个URL对象,然后使用`openConnection()`方法打开与该URL的连接。 ##### 创建`URL`对象 创建`URL`对象时,可以使用不同的构造函数,例如: ```java URL aURL = new URL("http", ...

    根据url来获取页面的截图

    总结一下,根据URL获取页面截图是通过Java的`java.net.URL`和`java.awt.Robot`类实现的,它可以方便地获取并保存网页的视觉表示。这个功能在很多应用场景中都十分有用,比如自动化测试中验证网页布局,或者用于数据...

    通过url获取网络位置上的文件流

    总结来说,Java中通过URL获取网络位置上的文件流涉及创建URL对象,建立连接,打开输入流,处理数据并关闭流。这个过程可以封装到工具类中,方便在不同场景下复用。在实际编程中,还需要考虑错误处理和性能优化。

    JAVA通过url获取网页内容

    通过使用 URLConnection 类,可以获取指定 URL 的内容,并读取输入流。在上面的代码中,我们使用了 URLConnection 类的 getInputStream() 方法来获取输入流,然后使用输入流读取网页内容。 三、使用 ...

    java 版Url转换工具,可得到真实的URL

    Java URL转换工具是一种用于解析和处理URL的程序,它能够帮助开发者获取URL背后的真实地址,尤其是在面对重定向、参数编码等情况时。在Web开发中,URL(Uniform Resource Locator)是互联网资源的统一地址,它包含了...

    Url参数获取工具.zip

    这个工具可以解析这种格式的URL,并提取出其中的参数及其对应的值。 C#作为.NET框架的主要编程语言,拥有强大的字符串处理和网络编程库。在C#中,可以使用`System.Uri`类来解析URL,获取其各个部分,包括查询字符串...

    Java源代码根据URL获取因特网网页源文件.rar

    这个RAR文件包含的"说明.txt"可能是详细的操作指南,而"根据URL获取因特网网页源文件"可能是一个Java源代码示例,用于演示如何实现这一功能。以下是对这个主题的详细讲解: 1. **网络编程基础**: 在Java中,进行...

    C#后台访问url请求结果

    本文将详细介绍一个在C#中用于后台访问URL并获取响应结果的方法:`GetURLResult`。该方法支持HTTP请求中的两种常见方法——GET和POST,并允许指定数据编码格式。这对于需要通过网络接口与远程服务器进行交互的应用...

    URL以及URLConnection的使用

    在Java编程语言中,URL(Uniform ...通过URL对象,我们可以构建出对任何网络资源的引用,然后通过URLConnection进行连接、发送请求和接收响应。学习并熟练掌握这两个概念,将有助于开发者更好地处理各种网络编程任务。

    Java使用JavaBean封装和连接URL.rar

    在本案例中,"Java使用JavaBean封装和连接URL"涉及到如何利用JavaBean来处理网络请求,尤其是通过URL来获取网络资源。下面将详细阐述这个过程。 首先,JavaBean的创建通常包括以下步骤: 1. 创建一个公共类,此类应...

    java中URL以及URLConnection类的使用

    这个示例首先创建了一个URL对象,并使用该对象获取主机、协议、端口和路径信息。然后,通过调用`openConnection()`方法建立连接,并通过URLConnection对象获取资源的类型、最后修改时间和内容长度等信息。最后,通过...

    url获取的java源代码

    你可以创建URL对象,解析字符串形式的URL,并通过该对象执行打开连接、读取数据等操作。 3. **HTTP 协议**: HTTP(超文本传输协议)是互联网上应用最广泛的一种网络协议,用于从Web服务器传输超文本到本地浏览器...

    PB通过URL下载局域网或者互联网上的图片

    标题中的“PB通过URL下载局域网或者互联网上的图片”是指使用PowerBuilder(PB)编程语言,通过HTTP或HTTPS协议的URL来实现从局域网或互联网上获取并下载图片资源的技术过程。在这个过程中,开发者通常会利用PB的...

    Android中url获得图片

    ### Android中通过URL获取图片的方法解析 在Android开发过程中,经常需要从网络上加载图片到应用中。本文将详细介绍如何利用Java代码实现从一个给定的URL地址下载并转换为Bitmap对象的过程。此方法适用于各种...

    Android通过网络URL获取图片并显示

    本篇将详细讲解如何在Android应用中实现从网络URL获取并显示图片的功能。 首先,我们需要一个网络库来处理HTTP请求。常见的有Volley、OkHttp和Retrofit等。这里以OkHttp为例,它是一个高效的网络库,支持异步请求和...

    Andriod连接URL并返回HTML源码DEMO

    在Android开发中,连接URL并获取HTML源码是常见的需求,比如用于网页抓取、网络数据解析等场景。本文将详细讲解如何在Android应用中实现这个功能,主要涉及URL连接和HTML源码解析两个核心知识点。 首先,Android...

    java URL转PDF文件

    这段代码会打开指定URL的连接,并获取到网页的输入流。 然后,我们需要解析HTML内容。Java中可以使用Jsoup库来解析HTML,它提供了一个易于使用的API来处理HTML文档。安装Jsoup后,我们可以这样做: ```java ...

    JAVA获取本地视频或者网络URL的时长.zip

    压缩包中的"获取网络连接URL的视频长度.txt"文件可能包含了如何处理网络URL的示例代码,而"ws.zip"可能是另一个相关项目或库。为了获取具体实现,你需要解压并查看其内容。 总的来说,获取视频时长需要对Java的文件...

Global site tag (gtag.js) - Google Analytics