Android上的HTTP POST请求

时间:2011-08-22 22:36:55

标签: java android http http-post

在过去的两个小时里,我一直在尝试向此页http://www.halebop.se/butik/byt_behall_nummer/发出POST请求,并尝试发送 numberToPort 。然而,我得到了一堆饼干,302暂时移回。

我想做的就是发送带有号码的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从302发送到URL并获取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 个答案:

答案 0 :(得分: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 Cookie并将其设置为请求here

答案 1 :(得分:1)

如果您正在使用HttpUrlConnection,那么HttpUrlConnection#setFollowRedirects可能就是您所追求的。将其设置为true以使其自动解决重定向问题。更好地使用setInstanceFollowRedirects(true)因为盲目地遵循重定向(静态setFollowRedirects会导致什么)从安全角度来看是不受欢迎的。