这很奇怪,因为它像昨天一样工作,但今天停止工作(可能是网站做了一些更改)。我在Android应用中使用此代码发布到具有适当参数的网址。现在,当它开始显示404错误时,我尝试了各种帖子'标题',但仍然无效。
如果你转到http://www.indianrail.gov.in/pnr_Enq.html并输入例如这个PNR号码:2727059219,输入那个普通的TEXT验证码(是的,我知道。叹气。)并点击“获取状态”在Firebug中观看它,你可以看到参数清楚。当我在我的应用程序中做几乎完全相同的事情时,它不再起作用了。请注意,验证码是客户端脚本生成的随机5位数字,如果用户编写相同内容则匹配。因此,在发送帖子参数时,(生成和输入)中的任何内容(如“11111”)都可以正常工作。
这是我的代码,直到昨天才开始工作。评论的标题是我现在尝试但仍无效的标题:
try
{
HttpClient client = new DefaultHttpClient();
HttpPost post = new HttpPost("http://www.indianrail.gov.in/cgi_bin/inet_pnrstat_cgi.cgi");
post.setHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:26.0) Gecko/20100101 Firefox/26.0");
post.setHeader("Accept","text/html,application/xhtml+xml,application/xml");
//post.setHeader("Accept","text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
post.setHeader("Accept-Language", "en-US,en;q=0.5");
post.setHeader("Accept-Encoding", "gzip, deflate");
//post.setHeader("Referer", "http://www.indianrail.gov.in/pnr_Enq.html");
//post.setHeader("Content-Type", "application/x-www-form-urlencoded");
post.setHeader("Connection", "keep-alive");
List<NameValuePair> urlParameters = new ArrayList<NameValuePair>();
urlParameters.add(new BasicNameValuePair("lccp_cap_val", "11111"));
urlParameters.add(new BasicNameValuePair("lccp_capinp_val", "11111"));
urlParameters.add(new BasicNameValuePair("lccp_pnrno1", "2727059219")); //the PNR number taken from app, but hard coded to test
urlParameters.add(new BasicNameValuePair("submit", "Get+Status"));
post.setEntity(new UrlEncodedFormEntity(urlParameters));
HttpResponse response = client.execute(post);
if(response.getStatusLine().getStatusCode() != 200)
throw new Exception("Error " + String.valueOf(response.getStatusLine().getStatusCode())); String result = EntityUtils.toString(response.getEntity());
}
catch (Exception ex)
{
mException = ex;
}
有人能告诉我代码在哪里错了吗?为什么它只能从浏览器中运行?
答案 0 :(得分:2)
您使用的是错误的端点网址,那里有一个额外的字符。
更改您的网址
注意已移除'r'inet_pn * r * stat_cgi。
我能够复制404;使用更改的网址,它可以工作 - 不再是404。