HTTP POST запрос на Android - PullRequest
       3

HTTP POST запрос на Android

0 голосов
/ 23 августа 2011

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

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

Код 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());
    }

Ответы [ 2 ]

3 голосов
/ 23 августа 2011

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

            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);

Здесь - подробное объяснение кода.

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

1 голос
/ 23 августа 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...