2011-08-22 2 views
0

За последние два часа я пытался сделать запрос POST на эту страницу http://www.halebop.se/butik/byt_behall_nummer/ и попытался отправить numberToPort. Однако я получаю кучу файлов cookie, а 302 временно возвращается.HTTP POST запрос на Android

Все, что я хочу сделать, это отправить запрос POST с номером и вернуть последнюю страницу. В iOS я делаю это с помощью ASIHTTPRequest, который обрабатывает перенаправление и файлы cookie.

IOS код:

NSString *halebopURLString = @"http://www.halebop.se/kontantkort/byt_behall_nummer/#"; 
ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:[NSURL URLWithString:halebopURLString]]; 
[request setPostValue:halebopNumber forKey:@"numberToPort"]; 
[request setPostValue:@"continue" forKey:@"action"]; 
[request setPostValue:@"submit" forKey:@"submit"]; 
[request startSynchronous]; 

Как я это сделать на Android?

В качестве альтернативы, решение PHP приемлемо.

Редактировать: Пробовал это, он не дает выхода и никаких исключений. У меня есть разрешение на интернет. Ожидаемый результат: отправьте POST, получите 302 и файлы cookie, отправьте файлы cookie на URL от 302 и получите HTML обратно (проверено с помощью FireBug), но я ничего не получаю.

try { 
     InputStream myInputStream =null; 
     URL url; 
     url = new URL("http://www.halebop.se/kontantkort/byt_behall_nummer/#"); 
     HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
     conn.setDoOutput(true); 
     conn.setInstanceFollowRedirects(true); 
     conn.setRequestMethod("POST"); 
     OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream()); 
     wr.write("numberToPort="+n+"&action=continue&submit=submit"); 
     wr.flush(); 
     myInputStream = conn.getInputStream(); 
     wr.close(); 

     BufferedReader rd = new BufferedReader(new InputStreamReader(myInputStream), 4096); 
     String line; 
     StringBuilder sbResult = new StringBuilder(); 
     while ((line = rd.readLine()) != null) { 
      sbResult.append(line); 
      Log.d(TAG, "Line "+line); 
     } 
     rd.close(); 
     String contentOfMyInputStream = sbResult.toString(); 
     Log.d(TAG, "Output "+contentOfMyInputStream); 
    } catch (Exception e) { 
     Log.d(TAG,e.getMessage()); 
    } 
+6

Как насчет Android код, который вы в настоящее время пытается сделать это с? –

+0

Было слишком грязно, его первое приложение для Android. Будет ли сообщение, если я не смогу получить предложение эмбосса работать. –

ответ

3

Вот как вы можете установить параметры сообщения:

  HttpPost httpost = new HttpPost(LOGIN_URL); 
    List <NameValuePair> nvps = new ArrayList <NameValuePair>(); 
    nvps.add(new BasicNameValuePair("test1","test1")); 
    nvps.add(new BasicNameValuePair("test2", "test2")); 

      httpost.setEntity(new UrlEncodedFormEntity(nvps, HTTP.UTF_8)); 

    response = getResponse(httpost); 

Here является подробное объяснение о коде.

Я также объяснил, как получить HTTP куки с вашего ответа и установить их в запрос here

1

Если вы используете HttpURLConnection, то HttpUrlConnection#setFollowRedirects может быть то, что вы после этого. Установите его на true, чтобы он автоматически разрешал перенаправление. Еще лучше использовать setInstanceFollowRedirects(true), поскольку слепо следуют за перенаправлениями (что статично setFollowRedirects приведет) будет смущен с точки зрения безопасности.

+0

Звучит неплохо, попробуй, как только я вернусь в свою коробку. Будет ли он удержаться и отправить все куки, как и ASIHTTPRequest? –

+0

Не вернусь в мое окно, но я проверил документы о куках. Правильно ли, что все, что мне нужно, это эти две строки, чтобы автоматически обрабатывать файлы cookie? ** CookieManager cookieManager = новый CookieManager(); CookieHandler.setDefault (cookieManager); ** –

+0

Пробовал это без везения. Нет выхода и исключений. Пожалуйста, см. Отредактированный пост сверху для кода. –

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