编译后的jar 和 ide的执行结果居然不一样

2013-07-28 21:11:53 +08:00
 leehon
ide是netbeans,写了个抓取网页的小东东。在netbens当中一切正常,而编译成jar,无论本机,还是centos 5.3就不一样了。代码里对网页进行subString截取,会报数组越界,indexOf某个字符串的时候返回-1也就是没找到。实在莫名其妙的
3615 次点击
所在节点    Java
8 条回复
leehon
2013-07-28 21:12:52 +08:00
在netbeans当中一切正常,百思不得将其
takwai
2013-07-28 21:21:26 +08:00
如果两者是抓取同一个地址,建议各导出两者抓取后的 HTML 源代码进行比较是否真得不同。

如果两者不是抓取同一个地址,代码写得严谨点, indexOf = -1 时,就不应该把值传递给 subString 了。
undeflife
2013-07-28 21:23:38 +08:00
我猜是编码问题..
scusjs
2013-07-28 21:45:36 +08:00
遇到过在eclipse和myeclipse中不一样的情况
sonicwu
2013-07-28 21:47:07 +08:00
@takwai 的思路是正确的,既然subString和indexOf的结果不同,差异肯定在操作的字符串上;若是目标页面确实返回了不同的内容,依据可能是user-agent

第一次发现有Java节点...
leehon
2013-07-29 20:48:16 +08:00
发现了问题,原因在于ide和最终生产环境中。抓取到的网页代码不一样,生成环境中被服务器识别出来了,我开始用的HttpURLConnection抓取,后来用了jsoup。但在ide下都能测试通过,而编译后就不行,不知道服务器是用什么方式判定我的
VYSE
2013-07-29 22:16:44 +08:00
@leehon 类似问题Python跟C下面都见过。
有的地方必须用PYTHONIOENCODING=UTF-8才能正确解开。
我觉得不太可能request时的区别,倒像是response拿下来编码进行了转换。
可以试试wireshark看request里accept-encoding有没有变化。
leehon
2013-07-30 12:02:32 +08:00
@takwai
@undeflife
@scusjs
@sonicwu
@VYSE
感谢大家的关注,问题解决了。原因在于我生成的URL有两个汉字参数,没有进行url编码,导致后一种情况服务器找不到数据,并302重定了。进行编码后,一切都正常了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/77254

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX