java将淘宝客链接转换为正常商品链接

本文介绍了一种使用Java模拟HTTP请求的方法,实现从淘宝客推广链接转换为标准淘宝商品链接的过程。通过解析和模拟真实浏览器行为,提取出最终的商品详情页面链接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考文章:PHP将淘宝客链接转换提取成普通淘宝链接

最近在做淘宝客网站,有个地方需要把淘宝客链接转换成正常的淘宝链接,找了很多文章都没有java的,只要按照一个php的文章自己改写了一下,文章内容有很多相同的地方。个人技术不咋滴,写的不完善的地方望大神指点。

 

1.先贴出主要的HttpGet方法,获取URLhandler

 

public static String HttpGetHeader(String url, String referer, String name) {

 

   String value="";

   CloseableHttpClient httpclient =  createSSLClientDefault();

   try {

   // 创建httpget.

          HttpGet httpget = new HttpGet(url);

           HttpParams params = new BasicHttpParams();

           params.setParameter("http.protocol.handle-redirects", false); // 默认不让重定向

              // 这样就能拿到Location头了

           httpget.setParams(params);

          httpget.setHeader("Referer", referer);

       // 执行get请求.

       CloseableHttpResponse response = httpclient.execute(httpget);

       for (Header header : response.getAllHeaders()) {

            if(name.equals(header.getName())){

                value=header.getValue();

            }

        }

    } catch (ClientProtocolException e) {

e.printStackTrace();

} catch (ParseException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

} finally {

// 关闭连接,释放资源

try {

httpclient.close();

} catch (IOException e) {

e.printStackTrace();

}

}

 

return value;

}

 

 

2.首先获取淘宝客链接

String url = "https://s.click.taobao.com/t?e=m%3D2%26s%3DvOGm3QkUYkUcQipKwQzePOeEDrYVVa64LKpWJ%2Bin0XJRAdhuF14FMahPMeAH3ua1xq3IhSJN6GRQv"+

     "IOjjqrm2mHsE2aIN1SQFGN2SfoDBWWvLek%2B0zMncU%2FFqDGjYg6Gf1JQd0f50BEK2pKIe%2BSnW4UTCT8olmq1K7NVy%2F1NHQyW5RzxTPSo5MYl7w3%2FA2kb";

 

3,获取初步跳转后的URL:

//htteGet方法获取urlhander中的Location  

String tu = HttpGetHeader(url, "","Location");

System.out.println("tu=\""+tu+"\";");

打印结果为

tu="https://s.click.taobao.com/t_js?tu=https%3A%2F%2Fs.click.taobao.com%2Ft%3Fe%3Dm%253D2%2526s%253DvOGm3QkUYkUcQipKwQzePOeEDrYVVa64LKp

WJ%252Bin0XJRAdhuF14FMahPMeAH3ua1xq3IhSJN6GRQvIOjjqrm2mHsE2aIN1SQFGN2SfoDBWWvLek%252B0zMncU%252FFqDGjYg6Gf1JQd0f50BEK2pKIe%252BSnW4UTCT

8olmq1K7NVy%252F1NHQyW5RzxTPSo5MYl7w3%252FA2kb%26ref%3D%26et%3Dyco%252B7wPMdYqpbwX7uD%252F7%252FkS7vntRnYIb";

 

因此链接中带有一个参数tu,后面要用到,所以将此链接取名为tu,继续下一步。

 

4.取得tu链接中的tu参数,也就是等号后面的内容:

String ref = tu.substring(tu.indexOf("tu=")+3,tu.length());

 

对编码熟悉的同学应该看出来了这其实是一条URL地址被escape编码了,我们使用java自定义一个解码函数对其进行处理一下,网上找到的unescape解码函数:

 public static String unescape(String src) {

 StringBuffer tmp = new StringBuffer();

 tmp.ensureCapacity(src.length());

 int lastPos = 0, pos = 0;

 char ch;

 while (lastPos < src.length()) {

  pos = src.indexOf("%", lastPos);

  if (pos == lastPos) {

   if (src.charAt(pos + 1) == 'u') {

    ch = (char) Integer.parseInt(src

      .substring(pos + 2, pos + 6), 16);

    tmp.append(ch);

    lastPos = pos + 6;

   } else {

    ch = (char) Integer.parseInt(src

      .substring(pos + 1, pos + 3), 16);

    tmp.append(ch);

    lastPos = pos + 3;

   }

  } else {

   if (pos == -1) {

    tmp.append(src.substring(lastPos));

    lastPos = src.length();

   } else {

    tmp.append(src.substring(lastPos, pos));

    lastPos = pos;

   }

  }

 }

 return tmp.toString();

}


解码:

ref = unescape(ref);

System.out.println("ref=\""+ref+"\";");

打印结果为

ref="https://s.click.taobao.com/t?e=m%3D2%26s%3DvOGm3QkUYkUcQipKwQzePOeEDrYVVa64LKpWJ%2Bin0XJRAdhuF14FMahPMeAH3ua1xq3IhSJN6GRQvIOjjqrm2mHsE2a

IN1SQFGN2SfoDBWWvLek%2B0zMncU%2FFqDGjYg6Gf1JQd0f50BEK2pKIe%2BSnW4UTCT8olmq1K7NVy%2F1NHQyW5RzxTPSo5MYl7w3%2FA2kb&ref=&et=yco%2B7wPMdYqpbwX7uD%2

F7%2FkS7vntRnYIb";


这地址跟我们获取的淘宝客链接几乎相同,就是后面多了两个参数,一个ref,一个et,这里我们把这个地址命名为ref。


淘宝客链接的跳转其实就是一个封装的JS程序,通过JS发起带有header参数的请求从而达到跳转的,这个header参数中最重要的就是referer,下面我就用httpGet模拟请求一下这个地址:

String taobaoUrl = HttpGetHeader(ref,tu,"Location");

System.out.println(taobaoUrl);


到这里就结束了:
打印的结果为https://item.taobao.com/item.htm?id=533121982458&ali_trackid=2:mm_70406380_14258197_63486373:1480647124_2k4_617621893

这就是一个普通的淘宝商品链接了。

 

完整代码

 

public static String HttpGetHeader(String url, String referer, String name) {

 

String value="";

CloseableHttpClient httpclient =  createSSLClientDefault();

try {

// 创建httpget.

HttpGet httpget = new HttpGet(url);

 HttpParams params = new BasicHttpParams();

           params.setParameter("http.protocol.handle-redirects", false); // 默认不让重定向

                                                                           // 这样就能拿到Location头了

           httpget.setParams(params);

httpget.setHeader("Referer", referer);

// 执行get请求.

CloseableHttpResponse response = httpclient.execute(httpget);

for (Header header : response.getAllHeaders()) {

if(name.equals(header.getName())){

value=header.getValue();

}

}

} catch (ClientProtocolException e) {

e.printStackTrace();

} catch (ParseException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

} finally {

// 关闭连接,释放资源

try {

httpclient.close();

} catch (IOException e) {

e.printStackTrace();

}

}

 

return value;

}

 

 public static String unescape(String src) {

 StringBuffer tmp = new StringBuffer();

 tmp.ensureCapacity(src.length());

 int lastPos = 0, pos = 0;

 char ch;

 while (lastPos < src.length()) {

  pos = src.indexOf("%", lastPos);

  if (pos == lastPos) {

   if (src.charAt(pos + 1) == 'u') {

    ch = (char) Integer.parseInt(src

      .substring(pos + 2, pos + 6), 16);

    tmp.append(ch);

    lastPos = pos + 6;

   } else {

    ch = (char) Integer.parseInt(src

      .substring(pos + 1, pos + 3), 16);

    tmp.append(ch);

    lastPos = pos + 3;

   }

  } else {

   if (pos == -1) {

    tmp.append(src.substring(lastPos));

    lastPos = src.length();

   } else {

    tmp.append(src.substring(lastPos, pos));

    lastPos = pos;

   }

  }

 }

 return tmp.toString();

}

 

public static void main(String[] args) {

String url = "https://s.click.taobao.com/t?e=m%3D2%26s%3DvOGm3QkUYkUcQipKwQzePOeEDrYVVa64LKpWJ%" +

"2Bin0XJRAdhuF14FMahPMeAH3ua1xq3IhSJN6GRQvIOjjqrm2mHsE2aIN1SQFGN2SfoDBWWvLek%2B0zMncU%2FF" +

"qDGjYg6Gf1JQd0f50BEK2pKIe%2BSnW4UTCT8olmq1K7NVy%2F1NHQyW5RzxTPSo5MYl7w3%2FA2kb";

String tu = HttpGetHeader(url, "","Location");

String ref = tu.substring(tu.indexOf("tu=")+3,tu.length());

ref = unescape(ref);

 

String taobaoUrl = HttpGetHeader(ref,tu,"Location");

System.out.println(taobaoUrl);

}

 


 

 

 

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值