以编程方式POST到ASP类型WEBPAGE

时间:2011-07-21 16:20:59

标签: asp.net parameters request

到目前为止,我已经为HttpURLConnection和setRequestProperty工作了2天,我无法将此网页发布到Post并返回我想要的页面。这就是我到目前为止......

... 字符串数据= URLEncoder.encode(“acctno”,“UTF-8”)+“=”+ URLEncoder.encode(“1991462”,“UTF-8”);

    URL oracle = new URL("http://taxinquiry.princegeorgescountymd.gov");
    HttpURLConnection yc = (HttpURLConnection) oracle.openConnection();
    yc.setRequestMethod("POST");

    yc.setRequestProperty("Content-Type", "text/html; charset=utf-8");
    yc.setRequestProperty("Content-Length", "19004");
    yc.setRequestProperty("Cache-Control", "private");
    yc.setRequestProperty("Set-Cookie", "ASP.NET_SessionId=v5rdm145zv3jm545kdslgz55; path=/");
    yc.setRequestProperty("X-AspNet-Version", "1.1.4322");
    yc.setRequestProperty("X-Powered-By", "ASP.NET");
    yc.setRequestProperty("Server", "Microsoft-IIS/6.0");

    yc.setDoOutput(true);
    yc.setDoInput(true);

    OutputStreamWriter out = new OutputStreamWriter(yc.getOutputStream());

    out.write(data);
    out.flush();
    //out.write(data);
    out.close();
    ...

它返回URL中定义的相同页面。它不会向我发送应该有一个结尾/taxsummary.aspx

的请求页面

看起来好像asp获取post数据并为给定的每个参数生成唯一的HTML。我如何给它正确的参数?

1 个答案:

答案 0 :(得分:2)

您的代码看起来很好。我相信它正确发送POST。我认为问题不在这里。当您使用浏览器时,首先执行至少一个HTTP GET以到达表单。执行此操作时,服务器会为您创建HTTP会话,并在响应标头Set-Cookie中返回其ID。当您使用浏览器提交表单时,它会返回此标题(Cookie),以便服务器可以识别会话。

当您使用java工作时,您正在跳过第一阶段(HTTP GET)。所以你要做的第一件事是POST,而你还没有会话。我不知道这个ASP页面的逻辑是什么,但我认为它只是拒绝这样的请求。

所以,首先检查这个猜测。您可以使用名为LiveHttpHeaders的Firefox插件。安装它并手动执行操作。您将看到所有HTTP请求和响应。保存他们。检查会话ID是否从服务器发送回客户端。现在在java中实现完全相同。

顺便说一句,当服务器发送多个重定向响应时,情况通常更复杂。在这种情况下,你必须遵循它们。 HttpConnection有方法setFollowRedirects()。用参数true调用它。

BTW2:Apache HttpClient是HttpConnection的完美替代品。它可以完成所有工作,在您实施此类任务时非常值得推荐。

这就是全部。祝好运。有时候这并不容易......