2013-06-19 3 views
-3

У меня есть сервер, с которого я должен сначала войти в систему (первый URL), тогда я отправлю еще один запрос POST (второй URL), но этот почтовый запрос может быть выполнен только в том случае, если я все еще зарегистрирован. Как можно выполнить запрос POST с использованием URL 2, который все еще регистрируется?Как сделать несколько запросов в одном HTTP-соединении?

Вот код:

HttpURLConnection con=(HttpURLConnection) new URL("http://Login(URL1)").openConnection(); 
      String headerName=null; String cookie=null; 
      for (int i=1; (headerName = con.getHeaderFieldKey(i))!=null; i++) { 
       if (headerName.equals("Set-Cookie"))    
       cookie = con.getHeaderField(i);    
      } 
      cookie = cookie.substring(0, cookie.indexOf(";")); 
      String cookieName = cookie.substring(0, cookie.indexOf("=")); 
      String cookieValue = cookie.substring(cookie.indexOf("=") + 1, cookie.length()); 
      System.out.println(cookieName); 
      System.out.println(cookieValue); 
      con=(HttpURLConnection) new URL("http://Login(URL1)").openConnection(); 
      con.setRequestMethod("POST"); 
      con.setRequestProperty("Cookie", "session_id=" + cookieValue); 
      con.setDoInput(true); 
      con.setDoOutput(true); 
      PrintWriter writer = new PrintWriter(con.getOutputStream()); 
      String account = "sdfsdf"; 
      String password = "sddfdsf"; 
      writer.println("&username=" + account + "&password=" + password + "&action=do_login&http=1"); 
      writer.close(); 

      System.err.println(con.getResponseCode()); 
      BufferedReader reader=new BufferedReader(new InputStreamReader(con.getInputStream())); 
      String response; 
      while ((response=reader.readLine())!=null) { 
       System.out.println(response); 
      } 
      reader.close(); 


      con=(HttpURLConnection) new URL("http://POST Request URL").openConnection(); 
      con.setRequestMethod("POST") 
+0

Нет такой вещи, как 'HTTPConnection'. Вы имеете в виду «HttpURLConnection»? – EJP

ответ

-1

Вы пытались добавить учетные данные для запроса в URL 2?

UsernamePasswordCredentials creds = new UsernamePasswordCredentials(
      username, password); 
request.addHeader(new BasicScheme().authenticate(creds, request)); 
HttpResponse response = httpClient.execute(request); 
+0

Большое спасибо за ответ, логин работает в URL-адресе 1 ... Даже если я снова это сделаю, мне нужно установить другое соединение для запроса POST ... Как я могу сделать POST-защиту, зарегистрированное состояние? Btw Я использую HttpURLConnection, а не HttpClient. – user2413711

+0

Итак, первый URL-адрес - это какая-то ручная страница входа на сервер? При входе на сайт или сервер ваши учетные данные сохраняются для последующих HTTP-запросов, отправленных в результате вашей навигации. Поэтому, когда вы отправляете запросы через java или любой другой язык, вам необходимо прикрепить учетные данные к EACH-запросу. – PandaBearSoup

+0

Да, первый URL-адрес - это просто страница ООН и PW ... после входа в систему появляется страница обслуживания ... Вот где я не могу получить эту услугу. Как я могу отправить учетные данные без запроса POST. – user2413711

0

Вам ничего не нужно.

  1. HttpURLConnection TCP соединение пула за кулисами.
  2. HTTP-сессии сохраняются через файлы cookie, даже через несколько соединений.
Смежные вопросы