Perl 使用WWW::Scripter字符集问题登录Java站点
我正在尝试使用WWW::Scripter模块登录java网站。使用WWW::Mechanize模块可以很好地工作,但是一旦经过身份验证,该站点就具有我需要调用的JavaScript函数,因此需要Scripter 在做了大量的故障排除之后,我发现从click事件发送的数据包的差异在于内容类型varaibale。 Mechanize有: 内容类型:application/x-www-form-urlencoded\r\n 但编剧有: 内容类型:application/x-www-form-urlencoded;字符集=ISO-8859-1\r\n 这是使用WireShark查看的 这解释了我从以下网站收到的错误: 错误消息:ISO-8859-1错误堆栈跟踪: java.nio.charset.IllegalCharsetNameException:ISO-8859-1 位于java.nio.charset.charset.checkNameCharset.java:305 位于java.nio.charset.charset.lookupCharset.java:439 位于java.nio.charset.charset.forNameCharset.java的内联编译代码Perl 使用WWW::Scripter字符集问题登录Java站点,perl,www-mechanize,www-authenticate,Perl,Www Mechanize,Www Authenticate,我正在尝试使用WWW::Scripter模块登录java网站。使用WWW::Mechanize模块可以很好地工作,但是一旦经过身份验证,该站点就具有我需要调用的JavaScript函数,因此需要Scripter 在做了大量的故障排除之后,我发现从click事件发送的数据包的差异在于内容类型varaibale。 Mechanize有: 内容类型:application/x-www-form-urlencoded\r\n 但编剧有: 内容类型:application/x-www-form-urlen
at java.lang.StringCoding$DecoderCache.makeDecoder(StringCoding.java(Com
堆积代码
在java.lang.StringCoding$1.runStringCoding.javaCompiled代码中
位于java.security.AccessController.doPrivileged1Native方法
位于java.security.AccessController.doPrivilegedAccessController.javaCom
堆积代码
在java.lang.StringCoding$DecoderCache.getDecoderStringCoding.javaComp
iled代码
在java.lang.StringCodeing.getDecoderStringCoding.javaInlined编译代码
在java.lang.StringCoding.decodeStringCoding.javaCompiled Code
在java.lang.String.String.javaCompiled代码中
在java.lang.String.String.javaInlined编译代码
位于com.ibm.ws.webcontainer.servlet.RequestUtils.parsePostDataRequestUti
编译代码
位于com.ibm.ws.webcontainer.srt.SRTServletRequest.parseParametersRTServ
letRequest.java编译代码
位于com.ibm.ws.webcontainer.srt.SRTServletRequest.getParameterNamesSRTSe
rvletRequest.java编译代码
位于javax.servlet.ServletRequestWrapper.getParameterNamesServletRequestW
rapper.java编译代码
位于org.apache.struts.util.RequestUtils.populateRequestStutils.javacompile
ed代码
位于org.apache.struts.action.RequestProcessor.processPopulateRequestProc
essor.java编译代码
位于org.apache.struts.action.RequestProcessor.processRequestProcessor.ja
真空复合码
位于org.apache.struts.action.ActionServlet.processActionServlet.javaInl
未定义编译代码
位于org.apache.struts.action.ActionServlet.dopostationservlet.javaComp
iled代码
在javax.servlet.http.HttpServlet.serviceHttpServlet.javaCompiled代码中
在javax.servlet.http.HttpServlet.serviceHttpServlet.javaCompiled代码中
位于com.ibm.ws.webcontainer.servlet.StrictServletInstance.doServiceStric
tServletInstance.java编译代码
位于com.ibm.ws.webcontainer.servlet.StrictLifecycleServlet.\u serviceStric
tLifecycleServlet.java编译代码
位于com.ibm.ws.webcontainer.servlet.IdleServletState.serviceStrictLifecy
cleServlet.java编译代码
位于com.ibm.ws.webcontainer.servlet.StrictLifecycleServlet.serviceStrict
LifecycleServlet.java内联编译代码
位于com.ibm.ws.webcontainer.servlet.ServletInstance.serviceServletInstan
java编译代码
位于com.ibm.ws.webcontainer.servlet.ValidServletReferenceState.dispatchV
alidServletReferenceState.java编译代码
位于com.ibm.ws.webcontainer.servlet.ServletInstanceReference.Dispatcher
vletInstanceReference.java内联编译代码
在com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilterWebAppFilte上
rChain.java编译代码
在com.infostream.web.filters.HibernateSessionFilter.doFilterHibernateS
JavaFilter.java编译代码
位于com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilterFilterI
nstanceWrapper.java编译代码
在com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilterWebAppFilte上
rChain.java编译代码
在com.infostream.web.filters.IdentificationFilter.doFilterIdentificati上
onFilter.java编译代码
位于com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilterFilterI
nstanceWrapper.java编译代码
在com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilterWebAppFilte上
rChain.java编译代码
位于com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.handleWebAppDi
spatchWebAppRequestDispatcher.java编译代码
位于com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.dispatchWebAp
pRequestDispatcher.java编译代码
位于com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.forwardWebApp
RequestDispatcher.java编译代码
位于com.ibm.ws.webcontainer.srt.WebAppInvoker.doForwardWebAppInvoker.jav
编译代码
位于com.ibm.ws.webcontainer.srt.WebAppInvoker.handleInvocationHookWebApp
Invoker.java编译代码
在com.ibm.ws.webcontainer.cache.i上
nvocation.cachedinvication.handleInvoc
AsionCachedInvocation.java编译代码
在com.ibm.ws.webcontainer.cache.invocation.CacheableInvocationContext.i上
nvokeCacheableInvocationContext.java编译代码
位于com.ibm.ws.webcontainer.srp.ServletRequestProcessor.dispatchByURISer
vletRequestProcessor.java编译代码
在com.ibm.ws.webcontainer.oseletener.oseletenerDispatcher.serviceOSE
Listener.java编译代码
位于com.ibm.ws.webcontainer.http.HttpConnection.handleRequestHttpConnect
ion.java编译代码
在com.ibm.ws.http.HttpConnection.readAndHandleRequestHttpConnection.ja上
真空复合码
在com.ibm.ws.http.HttpConnection.runHttpConnection.javaCompiled Code上
位于com.ibm.ws.util.ThreadPool$Worker.runThreadPool.javaCompiled Code
at java.lang.StringCoding$DecoderCache.makeDecoder(StringCoding.java(Com
我用来测试登录名的代码是:
#!/usr/bin/perl -w
use WWW::Scripter;
my $urlLogin = "XXX";
my $viper = WWW::Scripter->new();
$viper->use_plugin('JavaScript');
$viper->get($urlLogin);
$viper->form_name('loginForm');
$viper->field(username => "xxx");
$viper->field(password => "xxx");
$viper->click();
如前所述,如果我使用WWW::Mechanize而不是WWW::Scripter,那么这很好用
有人能建议我如何删除正在发布的数据包内容类型中的字符集字段吗?我看到你将这个问题交叉发布到PerlMonks,他们回答了你的问题 在CPAN上的模块注释中,我看到了这样的内容:bug:太多了,无法列出!说得委婉一点,这件事目前非常不稳定 我认为最好的支持javascript的web自动化是WWW::Mechanize::Firefox。要使用它,你必须在你的机器上安装Firefox并添加一个插件。perl脚本将使用firefox通过此插件使用javascript呈现页面。如果该页面与Firefox配合使用,可能会弄乱它 问候,