Java httpPost成.asp形式

Java httpPost成.asp形式,第1张

概述在Java中,如果我想在服务器上发送数据到表单,其中表单类型是:<formmethod="post"id="form1"name="form1"action=""><divid="login"class="box"><divclass="header">Login</div><

在Java中,如果我想在服务器上发送数据到表单,其中表单类型是:

 <form method="post" ID="form1" name="form1" action=""> <div ID="login" >  <div >Log in</div>  <div >   <label for="txtUser">User:</label>   <input ID="txtUser" name="txtUser" type="text" size="13" value="" />   <label for="txtPassword">Password:</label>   <input ID="txtPassword" name="txtPassword" type="password" size="13" value="" />   <input ID="BLogin" name="BLogin" type="submit" value="Log in"  />  </div>  <div >   <input type="checkBox" ID="chkSave" name="chkSave"   /> <label for="chkSave">Save account</label>  </div> </div> </form>

在这种情况下,我必须使用httpPost方法,因为表单接受方法“post”,因为它在表单定义(初始化)中声明:

<form method="**post**" ID="form1" name="form1" action="">

在我的例子(AndroID解决方案)我正在使用

__VIEWSTATE__EVENTTARGET__EVENTARGUMENTctl00$tbUsernamectl00$tbPwdctl00$chkRememberLoginctl00$cmdLogin

值,因为它们是服务器发布帖子所需的一次.在没有编程服务器的情况下,我在哪里可以找到服务器所需的内容?我使用WireShark软件查看客户端和服务器之间的所有响应或传出请求,只需使用http过滤器来查看http事务.然后使用任何浏览器以通常的方式在线登录,然后在WireShark中,您将看到浏览器和服务器之间的所有请求和响应.通过已知的IP地址或主机地址找到您感兴趣的那个,然后复制您在任何事务上单击右键时找到的可读字节.因此,当您这样做时,您将发现您对服务器的请求必须如何以及需要哪些值.
回到编码(java):

public httpResponse httpPost1(String vIEwstateValue, String url, String username, String password)            throws ConnectTimeoutException {            try {                // --------post                httpPost httppost = new httpPost(url);                List<nameValuePair> nameValuePairs = new ArrayList<nameValuePair>();                nameValuePairs.add(new BasicnameValuePair("__VIEWSTATE",                        vIEwstateValue));                nameValuePairs.add(new BasicnameValuePair("__EVENTTARGET", ""));                nameValuePairs                        .add(new BasicnameValuePair("__EVENTARGUMENT", ""));                nameValuePairs.add(new BasicnameValuePair("ctl00$tbUsername",                        username));                nameValuePairs.add(new BasicnameValuePair("ctl00$tbPwd", password));                nameValuePairs.add(new BasicnameValuePair(                        "ctl00$chkRememberLogin", "0"));                nameValuePairs.add(new BasicnameValuePair("ctl00$cmdLogin",                        "Login"));                // nameValuePairs.add(new                // BasicnameValuePair("ctl00$cmdForgetMe",                // "Forget Me"));                httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));                response = clIEnt.execute(httppost);                String responseHTML = EntityUtils.toString(response                        .getEntity());                // System.out.println(responseHTML);                // System.out.println(response1.getStatusline());            } catch (ClIEntProtocolException e) {            } catch (IOException e) {            }        return response;    }

在这里,我将值发布到我事先知道的URL.

您可以使用添加标头

httppost.addheader("Referer",                    "http://website/login.asp");

或请求的超时值

httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));            int timeoutConnection = 5000;            httpParams httpParameters = new BasichttpParams();            httpconnectionParams.setConnectionTimeout(httpParameters,                    timeoutConnection);

在这种情况下,最好在发生超时时捕获异常并再次发出请求,因为建议在httpClIEnt文档中进行.

默认情况下,httpClIEnt遵循重定向,但每次重定向都可以通过以下方式捕获:

private RedirectHandler customredirectHandler;........(maybe constructor..)    clIEnt.setRedirectHandler(customredirectHandler);........class CustomredirectHandler extends DefaultRedirectHandler {        @OverrIDe        public boolean isRedirectRequested(httpResponse response,                httpContext context) {            // System.out.println("isRedirectRequested");            return true;        }        @OverrIDe        public URI getLocationURI(httpResponse response, httpContext context)                throws ProtocolException {            String location = response.getLastheader("Location").getValue();            if (location.contains("Login")) {                // System.out.println("Login needed");            } else {                // System.out.println("No login required");            }            URI redirectURI = null;            try {                redirectURI = new URI(location);            } catch (URISyntaxException e) {            }            return redirectURI;        }    }}

然后在完成客户端所需的一切后,您可能会释放客户端连接:

public voID shutDownClIEnt() {    clIEnt.getConnectionManager().shutdown();}

这是httpClIEnt的一个例子,不要忘记你也可能使用UrlConnection,这里有差异显示:

http://www.innovation.ch/java/HTTPClient/urlcon_vs_httpclient.html

所以这取决于您喜欢使用什么以及哪种更适合您的项目.

附:此POST解决方案应用于我的项目,但它可能不适用于您的..首先使用Wireshark,然后查看必须将哪种请求发送到服务器.在我的情况下,它就像vIEwstate = sdsgdgdfd323& username = dsfngkjfdg& password = dsfsdfsfs …..但我知道可能还有其他人.

解决方法:

URL是否接受PUT代替POST完全取决于服务器.

大多数期望POST的服务器都只接受POST.很少使用PUT.

总结

以上是内存溢出为你收集整理的Java httpPost成.asp形式全部内容,希望文章能够帮你解决Java httpPost成.asp形式所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1102349.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-28
下一篇 2022-05-28

发表评论

登录后才能评论

评论列表(0条)

保存