HttpURLConnection在win7与2008 server r2下结果不一样

awusoft 2018-02-28 09:19:33


JSP代码:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@page import="java.io.IOException"%>
<%@page import="java.net.URL"%>
<%@page import="java.net.HttpURLConnection"%>
<%@page import="java.io.BufferedReader"%>
<%@page import="java.io.InputStreamReader"%>
<%@page import="java.net.MalformedURLException"%>
<%@page import="java.io.OutputStream"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">

<title>My JSP 'test.jsp' starting page</title>

<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->

</head>

<body>
<%

try {
// 1. 获取访问地址URL
URL url = new URL("https://www.fedex.com/my/");
// 2. 创建HttpURLConnection对象
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
/* 3. 设置请求参数等 */
// 请求方式
connection.setRequestMethod("GET");
// 超时时间
connection.setConnectTimeout(3000);
// 设置是否输出
connection.setDoOutput(false);
// 设置是否读入
connection.setDoInput(true);

// 设置是否使用缓存
connection.setUseCaches(false);
// 设置此 HttpURLConnection 实例是否应该自动执行 HTTP 重定向
connection.setInstanceFollowRedirects(true);
// 设置使用标准编码格式编码参数的名-值对
connection.setRequestProperty("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8");
connection.setRequestProperty("Accept-Encoding", "gzip, deflate, br");
connection.setRequestProperty("Referer", "https://www.fedex.com/my/");
connection.setRequestProperty("Host", "www.fedex.com");
connection.setRequestProperty("Connection", "keep-alive");
connection.setRequestProperty("Upgrade-Insecure-Requests", "1");
connection.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:58.0) Gecko/20100101 Firefox/58.0");

// 连接

connection.connect();
/* 4. 处理输入输出 */
// 写入参数到请求中
// 从连接中读取响应信息
String msg = "";
int code = connection.getResponseCode();
if (code == 200) {
String sessionId = "";
String cookieVal = "";
String key = null;
for(int i = 1; (key = connection.getHeaderFieldKey(i)) != null; i++){
if(key.equalsIgnoreCase("set-cookie")){
cookieVal = connection.getHeaderField(i);
cookieVal = cookieVal.substring(0, cookieVal.indexOf(";"));
sessionId = sessionId + cookieVal + ";";
out.println(cookieVal+"<br>");
}
}

BufferedReader reader = new BufferedReader(
new InputStreamReader(connection.getInputStream()));
String line;

while ((line = reader.readLine()) != null) {
msg += line + "\n";
}
reader.close();
}
// 5. 断开连接
connection.disconnect();

// 处理结果
//out.println(msg);
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
%>
</body>
</html>





以上JSP代码放在2003 Server 64位,Tomcat6,JDK6下获取的结果:

siteDC=edc
fdx_cbid=31214489081519780287031840257131
ak_bmsc=55EE64131225D40487CD1B061FC4D9116B0E2CC1D3280000BF01965AD51B2372~pluwIHQvxHq+mog9P18xmSe+PJs0gv/8KkIg9fkObdJEgL+/pOF/t+c3s5kFSgd1SceOPzhbDHEuZoKcm6wQtKnO4FFfWMIM+jdkIAHtfXNISkSxGwgOMrar3hKyjkTzPq/aFrOsGGrGBdIW0VYbkjAARJvKBItjd+jM3ugxdMU7nwQod3/PDaFLO9sAZivBSjikwl7gS7v6D8Dj7xoIcmsH6zE4P+hoR3qh36r+G/MLo=
bm_mi=DF0B7D3B47EF16D48131FE8A2FA5F3D1~LEYRDXYiG/BFmIpYVH9K51V731DW2D+ukQEXXwtFA5/GUfHR2b9mYPdhSn8ZtmzEmD2A4lonV2fmXSwgx8ddqSaaPaNmargsZvGISabuNCMQ8BDS4FZH7hsQ8sMdcimiAdrQCQjEgHzoA+KVn+IaA5saTYnrXrKZFMxlXfta0cX/0E5xIxNgAgVXE5V1h75xgfRC7BnT/hxU1Pq7Eo8/rbzoZwn/Pv1clCK8jgM+Axw=

获取到了:ak_bmsc与bm_mi两个cookie值,将代码放在2008 server 64 r2+Tomcat6+JDK6下就获取不到这两个cookie值,各位大神有没有遇到过相关的情况?是否JDK在不同的平台下使用的连接认证不一样的原因.先谢谢大家
...全文
621 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
awusoft 2018-03-01
  • 打赏
  • 举报
回复
引用 2 楼 trocp 的回复:
建议从以下方面分析 你的JSP相当于IE客户端,https://www.fedex.com/my/这个站点相当于服务端, 按理,你的cookie中的值是服务端设置的,因此建议在JSP所在服务器抓包,看在2008 server 64 r2操作系统下发出的HTTP请求,服务器响应是否有相应的cookie值。
原因估计应该是jdk在不同的服务器中使用不同的http连接方式或者说是认证方式,或者少发一些请求头信息,导致与目标服务器连接未被识别.目前只会用浏览器查看简单的请求参数信息,还不会用抓包工具分析....
oO临时工Oo 2018-03-01
  • 打赏
  • 举报
回复
引用 3 楼 AWUSOFT 的回复:
[quote=引用 2 楼 trocp 的回复:] 建议从以下方面分析 你的JSP相当于IE客户端,https://www.fedex.com/my/这个站点相当于服务端, 按理,你的cookie中的值是服务端设置的,因此建议在JSP所在服务器抓包,看在2008 server 64 r2操作系统下发出的HTTP请求,服务器响应是否有相应的cookie值。
原因估计应该是jdk在不同的服务器中使用不同的http连接方式或者说是认证方式,或者少发一些请求头信息,导致与目标服务器连接未被识别.目前只会用浏览器查看简单的请求参数信息,还不会用抓包工具分析....[/quote]
引用 3 楼 AWUSOFT 的回复:
[quote=引用 2 楼 trocp 的回复:] 建议从以下方面分析 你的JSP相当于IE客户端,https://www.fedex.com/my/这个站点相当于服务端, 按理,你的cookie中的值是服务端设置的,因此建议在JSP所在服务器抓包,看在2008 server 64 r2操作系统下发出的HTTP请求,服务器响应是否有相应的cookie值。
原因估计应该是jdk在不同的服务器中使用不同的http连接方式或者说是认证方式,或者少发一些请求头信息,导致与目标服务器连接未被识别.目前只会用浏览器查看简单的请求参数信息,还不会用抓包工具分析....[/quote] HTTP抓包用Fiddler这个小工具,百度可以下载
oO临时工Oo 2018-02-28
  • 打赏
  • 举报
回复
建议从以下方面分析 你的JSP相当于IE客户端,https://www.fedex.com/my/这个站点相当于服务端, 按理,你的cookie中的值是服务端设置的,因此建议在JSP所在服务器抓包,看在2008 server 64 r2操作系统下发出的HTTP请求,服务器响应是否有相应的cookie值。

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧