java - 如何编写Java代码从需要登录并使用POST请求的网站读取字段?

标签 java web-services post web

需要一些帮助来从网站获取一些数据。

以前,我们的应用程序中有以下代码,它用于获取所需的数据。我们过去只是通过传递用户名、密码和搜索参数(DEA 编号)形成 URL 来读取必填字段。也可以直接从浏览器访问相同的 URL(带有参数)来查看结果。这是一个简单的 GET 请求:

{URL url = new URL(
                    "http://www.deanumber.com/Websvc/deaWebsvc.asmx/GetQuery?UserName="+getUsername()+"&Password="+getPassword()+"&DEA="
                            + deaNumber
                            + "&BAC=&BASC=&ExpirationDate=&Company=&Zip=&State=&PI=&MaxRows=");

Document document = parser.parse(url.toExternalForm());
// Ask the document for a list of all <sect1> tags it contains
NodeList sections = document.getElementsByTagName("DEA");
//Followed by a loop code to get each element by using sections.item(index).getFirstChild() etc.
}

现在,网站网址已更改为以下内容:

https://www.deanumber.com/RelId/33637/ISvars/default/Home.htm

我可以使用凭据登录该 URL,转至搜索页面,输入 DEA 号码并进行搜索。单击主页上的“登录”链接后,会弹出登录页面。此外,最终结果也会以弹出窗口的形式出现。这是一个 POST 请求,因此我无法形成可以在代码中使用的完整 URL。

我不是 Web 服务方面的专家,但我认为我需要一个像上面代码中提到的那样的 Web 服务 URL。不知道如何得到它!即使我得到了 URL,我也不知道如何通过 Java 代码进行登录并搜索 DEA 号码。

此外,如果我可以在 Java 中使用之前手动验证 URL,那就太好了。有什么办法请告诉我。

或者,如果 Java 中有任何替代方法;请建议。

提前致谢。

最佳答案

首先,网站之前提供的方法是完全错误且不安全的,因为它以纯文本形式将用户名和密码作为查询字符串参数传递。我想,他们会意识到这一点并改变他们的认证方式。

此外,他们似乎还限制了来自像您这样的客户端应用程序的基于 URL 的直接请求。针对客户的此类请求,他们发布了网络服务。 Check this link.他们还提到了网络服务请求计数的比率。

因此,您可能需要打开正式的通信 channel 来获取身份验证和其他详细信息,以便为此目的访问其网络服务。根据 Web 服务客户端身份验证所使用的内容,您可以对客户端进行编码以访问 Web 服务。

我希望这会有所帮助。

关于java - 如何编写Java代码从需要登录并使用POST请求的网站读取字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46470034/

相关文章:

java - RESTful URL 似乎没有正确映射到使用 Spring MVC 的 url

java - 从 Spring-WS 中的 getWebServiceTemplate().marshalSendAndReceive() 获取 byte[] 响应

asp.net - 使用 jquery 错误中的参数调用 asp.net webmethod

php - 刷新后保存值

java - 如何在 JavaFX 中混合 StackedBarChart 和 LineChart?

java - 如何通过拆分包含重复名称的 Map <String, List<Object>> 的键来创建新 Map

java - 关于 Web 服务和 Portlet 的推荐书籍

java - 代号一 - Web 服务不支持外部化对象

rest - HTTP PUT 请求限制

angular - 为什么我不能从本地 Angular 应用发布到在docker上运行的RestHeart本地测试api?