Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.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
使用java和jaunt api登录网页时出现问题_Java_Authentication_Jaunt Api - Fatal编程技术网

使用java和jaunt api登录网页时出现问题

使用java和jaunt api登录网页时出现问题,java,authentication,jaunt-api,Java,Authentication,Jaunt Api,所以我尝试使用Jaunt登录到一个网页。首先要提到的是网页是.aspx,提交按钮有一个选项onclick=“javascript:WebForm\u DoP…”,据我所知,Jaunt不支持javascript,对吗? 如果我错了,我使用的代码就是Jaunt示例中的代码: Form form = userAgent.doc.getForm(0); form.setTextField("Login1$UserName","USER"); form.setPas

所以我尝试使用Jaunt登录到一个网页。首先要提到的是网页是.aspx,提交按钮有一个选项
onclick=“javascript:WebForm\u DoP…”
,据我所知,Jaunt不支持javascript,对吗? 如果我错了,我使用的代码就是Jaunt示例中的代码:

Form form = userAgent.doc.getForm(0);
form.setTextField("Login1$UserName","USER");
form.setPassword("Login1$Password","PASSWORD");
form.setCheckBox("Login1$RememberMe",false);
form.submit("GO");
System.out.println(userAgent.getLocation());
所有名称和值都正确,并且用户和密码有效,因为我可以使用web浏览器登录。执行代码后,在输出中,我得到以下结果:

消息:UserAgent.sendPOST;连接错误请求URL: [张贴 __VIEWSTATE=%2WEPDWUJLTK5MDC0NJQ2ZBBR5FX0NVBNRYB2XZUMVXDWLYZVBVC3RCYWNRS2V5x18WAGurtG9NAW4xJFJLBWVTYMVYTWUFF0xVZ2LUMSRB2DPKLKLYWDLQNV0DG9UPPCARODJIWPEMT8HCMFAN6IMWI%3D&u VIEWSTATEGENERATOR=CA0B0334&Login1%24UserName=USER&Login1%24Password=PASSWORD&Login1%24Login1%24LoginButton=GO] 答复:[无]

表格div如下所示:

<form name="form1" method="post" action="Default.aspx" onsubmit="javascript:return WebForm_OnSubmit();" id="form1" style="text-align:center">


你知道我有什么问题吗?如果Jaunt不允许我登录,有人能推荐我一个用于网络抓取和交互的库吗?谢谢

你好像被卡住了。实际上,aspx页面使用AJAX分页。您必须提取uuu VIEWSTATE、uuu VIEWSTATEGENERATOR和所有其他表单值的值,然后在请求正文中使用POST方法发送它们。您可以使用获取包含所有这些隐藏变量和表单条目的请求正文

在Java中,您可以使用Selenium或HTMLUnit,这是一种支持JavaScript的无Java GUI浏览器,用于重新运行网页

编辑:你也可以使用JauntAPI,我刚刚用它试过,你所做的就是发送一个POST请求和请求正文,你可以很容易地用Fiddler检查它,它可以工作

HTTP POST中的表单值以与querystring相同的格式在请求体中发送。您可以使用Fiddler检查链接的请求正文,然后从Textview复制请求正文,并将编码数据作为请求正文发送

UserAgent userAgent = new UserAgent();
userAgent.sendPOST("<your link to form page>","<request body>");
UserAgent UserAgent=newuseragent();
userAgent.sendPOST(“,”);

你能说得更清楚些吗?你说的标题是什么意思?你能写代码来解释吗?如果仍然不清楚,请给我一个.aspx链接,我会为你提供方法,比如说facebook登录页面。它使用https,一个安全的通道,你不能只获取请求消息。。为我提供一个使用http连接的简单链接。你是说jaunt不支持它?因为我可以使用标准java库登录(而不是在facebook的另一个https登录页面上)。java.net.URL URL=新URL(空,登录页面,新sun.net.www.protocol.https.Handler());Jsoup可以很好地完成这项任务。只需选择表单,使用((FormElement)doc.select(“form[name=form1]”)将其转换为表单元素。formData()并使用API发送表单。您可以使用Jsoup解析Jsoup。parse(html)查看