当前位置: 首页 > 面试题库 >

Java httpPost转换为.asp格式

欧阳博超
2023-03-14
问题内容

在Java中,如果要向服务器上的表单发送数据,则表单类型为:

 <form method="post" id="form1" name="form1" action="">
 <div id="login" class="box">
  <div class="header">Log in</div>
  <div class="content">
   <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 class="footer">
   <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
__EVENTARGUMENT
ctl00$tbUsername
ctl00$tbPwd
ctl00$chkRememberLogin
ctl00$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

因此,这取决于您更喜欢使用什么以及更适合您的项目。

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


问题答案:

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

大多数期望POST的服务器将仅接受POST。很少使用PUT。



 类似资料:
  • 这是一个小问题,但我还是快疯了。 我正在为一个<代码> 问题是当这被渲染时,

  • 本文向大家介绍ASP VBScrip数据转JSON格式,包括了ASP VBScrip数据转JSON格式的使用技巧和注意事项,需要的朋友参考一下 aspjosn 是一款 实现 VBScript代码JSON 序列化的ASP技术。 aspjosn 输入可以是对象或者数组类型。jsObject 和 jsArray 类在服务器端将数据转换成JSON,这两个类都基于 jsCore 实现。 aspjson 支持

  • 问题内容: 我尝试使用json格式的文件作为输入。这是示例数据的片段。 可以在r中使用这种复杂的json格式制作一个csv,以便更平滑地处理数据吗? 例如,有以下基本类别:基本信息照片创建者位置类别网址 可以制作带有basic_information.id,creator.id等子类别类别的csv文件吗? 问题答案: 在研究您的答案时,我在评论中张贴了一些链接,但现在我非常确信这是解决问题的方法。

  • 问题内容: 我有一个名为的表,还有一个名为的列,ID的数据如下所示: IN_Date的数据类型为varchar(50)。 我正在尝试将IN_Date转换为mm / dd / yyyy格式。我尝试这样做: 但是格式仍然没有改变。谁能告诉我我要去哪里错了 问题答案: 您需要先进行转换才能将数据固定(正确的数据类型), 然后再 格式化…

  • 将字符串转换为驼峰格式(camelcase)。 将字符串分解成单词,并将它们每个单词的第一个字母大写,重新拼接。使用一个正则表达式。 const toCamelCase = str => { let s = str && str .match(/[A-Z]{2,}(?=[A-Z][a-z]+[0-9]*|\b)|[A-Z]?[a-z]+[0-9]*|[A-Z]|[0

  • 问题内容: 我正在尝试将Shift_JIS格式的文件转换为UTF-8格式。为此,下面是我的方法: 读取Shift_JIS文件 每行的getBytes并将其转换为UTF-8 创建新文件并将UTF-8转换后的值写入该文件 问题是在第2步中没有发生转换。我正在使用下面的代码将Shift_JIS转换为UTF-8: 请让我知道是否需要其他信息。 我有以下两个 问题 : 1.还有其他更好的方法(步骤)来执行此