这是一个例子,我想发布到一个网站,但在此之前,我必须检索viewstate值,然后使用此值发布文章,但问题是viewstate值在每次发布文章时都在更改,所以我有点困惑,如果服务器上的值已经不同,如何在第二篇文章中使用它的值。
有什么解决办法吗?还是我做错了一切?
带httppost的主机
try {
HttpClient client = new DefaultHttpClient();
HttpPost request = new HttpPost(
"www.website.com/Login.aspx");
String viewstate = getViewState(client, request,
"www.website.com/Login.aspx");
System.out.println(viewstate);
request.getParams().setBooleanParameter(
CoreProtocolPNames.USE_EXPECT_CONTINUE, false);
request.setHeader("Content-Type", "text/html; charset=utf-8");
List<NameValuePair> postParameters = new ArrayList<NameValuePair>();
postParameters.add(new BasicNameValuePair("__VIEWSTATE",
viewstate))
postParameters.add(new BasicNameValuePair("__EVENTTARGET", ""));
postParameters.add(new BasicNameValuePair("__EVENTARGUMENT", ""));
postParameters.add(new BasicNameValuePair("ctl00$tbUsername",
"name"));
postParameters
.add(new BasicNameValuePair("ctl00$tbPwd", "psw"));
postParameters.add(new BasicNameValuePair("ctl00$chkRememberLogin",
"0"));
postParameters
.add(new BasicNameValuePair("ctl00$cmdLogin", "Login"));
UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(
postParameters);
request.setEntity(formEntity);
HttpResponse response = client.execute(request);
String responseBody2 = EntityUtils.toString(response.getEntity());
System.out.println(responseBody2);
}
// print page wap
// System.out.println(responseBody2);
}
然后发送httpget
String html = "";
try {
URL url1 = new URL("www.website.com/Login.aspx");
URLConnection conn = url1.openConnection();
// Get the response
BufferedReader rd = new BufferedReader(new InputStreamReader(
conn.getInputStream()));
StringBuffer sb = new StringBuffer();
String line;
while ((line = rd.readLine()) != null) {
sb.append(line+"\n");
}
rd.close();
html = sb.toString();
} catch (Exception e) {
e.printStackTrace();
}
return findViewstate(html);
所以我在想,也许我应该将同一个httpClient与cookies或其他东西一起重用,以便下一个请求将指向同一个页面。。。
最佳答案
如果我记得正确,ViewState值在默认情况下是加密的,并且其中包含防止篡改的信息,因此,多个请求将导致不同的值。但是如果你做了一个请求,然后像用户一样发回一个页面,你应该没事,但是你需要确保所有数据都返回,否则你会遇到ASP.NET事件验证的问题。
关于java - HttpPost中的VIEWSTATE值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6786246/