gpt4 book ai didi

java - 如何在Android中的ImageView中显示验证码?

转载 作者:行者123 更新时间:2023-12-01 17:17:15 25 4
gpt4 key购买 nike

我在 Google Play 上有一个 PNR 查询应用程序。它工作得很好。但最近 Indian Railwys 在他们的 PNR 查询部分添加了验证码,因此我无法将正确的数据传递到服务器以获得正确的响应。如何以 ImageView 的形式在我的应用程序中添加此验证码,并要求用户输入验证码详细信息,以便我可以发送正确的数据并获得正确的响应。

Indian Railways PNR Inquiry Link

enter image description here

最佳答案

如果你检查 html 代码,它实际上是相当糟糕的验证码。验证码背景为:http://www.indianrail.gov.in/1.jpg这些数字实际上在输入标签中:

<input name="lccp_cap_val" value="14167" id="txtCaptcha" type="hidden">

他们正在做的是,通过 JavaScript,使用隐藏输入标记中的数字并将它们放在带有“验证码”背景的跨度上。

所以基本上你的流程是:

  • 阅读他们的 html

  • 从输入字段获取“验证码”(哈哈,虽然验证码很有趣)值

  • 当用户将数据输入您的 PNR 字段并按“获取状态”时

  • 发布表单字段,将 PNR 输入正确的值,将验证码输入正确的值

  • 解析响应

哦,是的,还有一件事。您可以在隐藏输入和“验证码”中输入任何值输入,只要它们相同。他们没有通过 session 或任何东西。

编辑(提交表单的代码示例):为了简化发布表单,我推荐使用 Apache 的 HttpClient 组件: 奥 git _a假设您下载了 HttpClient 4.3.1。包括客户端、核心和 mime项目中的库(复制到 libs 文件夹,右键单击项目,属性、Java 构建路径、库、添加 Jars -> 添加这些 3。)。

代码示例为:

private static final String FORM_TARGET = "http://www.indianrail.gov.in/cgi_bin/inet_pnstat_cgi.cgi";
private static final String INPUT_PNR = "lccp_pnrno1";
private static final String INPUT_CAPTCHA = "lccp_capinp_val";
private static final String INPUT_CAPTCHA_HIDDEN = "lccp_cap_val";

private void getHtml(String userPnr) {
MultipartEntityBuilder builder = MultipartEntityBuilder.create();
builder.addTextBody(INPUT_PNR, userPnr); // users PNR code
builder.addTextBody(INPUT_CAPTCHA, "123456");
builder.addTextBody("submit", "Get Status");
builder.addTextBody(INPUT_CAPTCHA_HIDDEN, "123456"); // values don't
// matter as
// long as they
// are the same

HttpEntity entity = builder.build();

HttpPost httpPost = new HttpPost(FORM_TARGET);
httpPost.setEntity(entity);

HttpClient client = new DefaultHttpClient();

HttpResponse response = null;
String htmlString = "";
try {
response = client.execute(httpPost);
htmlString = convertStreamToString(response.getEntity().getContent());
// now you can parse this string to get data you require.
} catch (Exception letsIgnoreItForNow) {
}
}

private static String convertStreamToString(InputStream is) {
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
StringBuilder sb = new StringBuilder();

String line = null;
try {
while ((line = reader.readLine()) != null) {
sb.append(line);
}
} catch (IOException ignoredOnceMore) {
} finally {
try {
is.close();
} catch (IOException manyIgnoredExceptions) {
}
}

return sb.toString();
}

另外,请注意,我没有将其包装在异步调用中,因此您必须这样做。

关于java - 如何在Android中的ImageView中显示验证码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21087659/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com