需要一些帮助来从网站获取一些数据。
以前,我们的应用程序中有以下代码,它用于获取所需的数据。我们过去只是通过传递用户名、密码和搜索参数(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/