2011-07-22 4 views
1

Вот так, я хочу опубликовать на веб-сайте, но до этого я должен получить значение viewstate, а затем сделать сообщение, используя это значение, но проблема в том, что значение viewstate меняется каждый раз я делаю сообщения, поэтому я немного запутался, как я могу использовать его значение во втором столбце, если значение на сервере будет уже другим. Есть ли какое-либо решение, или я все делаю неправильно?Значение VIEWSTATE в HttpPost

главный с 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 с печеньем или что-нибудь, так что следующий запрос будет быть на той же странице ...

+0

Это действительно связано с Java? – pap

+0

ну, я делаю запрос по почте от java –

+0

, тогда это не связано с asp.net ... – Peter

ответ

0

Если я правильно помню, значения ViewState зашифровываются по умолчанию и содержат информацию в них, чтобы предотвратить несанкционированное вмешательство, поэтому несколько req uests приведет к разным значениям. Но если вы сделаете запрос, то сделайте сообщение обратно на страницу, так как пользователь будет вам в порядке, но вам нужно будет убедиться, что все данные вернутся или вы столкнетесь с проблемами с проверкой событий ASP.NET.

+0

Итак, теперь я должен найти способ сделать обратную передачу для службы –

+0

Я сделал сообщение сейчас и проанализировал его с тем, что я делаю в браузере, wirehark показал то же самое, только моя версия от клиента привела к утверждению «Перемещение объекта» с сервера –

Смежные вопросы