Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 使用WWW::Scripter字符集问题登录Java站点_Perl_Www Mechanize_Www Authenticate - Fatal编程技术网

Perl 使用WWW::Scripter字符集问题登录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

我正在尝试使用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的内联编译代码

    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配合使用,可能会弄乱它

问候,