【问题标题】:HTTP POST request on AndroidAndroid 上的 HTTP POST 请求
【发布时间】:2011-08-26 23:26:04
【问题描述】:

在过去的两个小时里,我一直在尝试向此页面http://www.halebop.se/butik/byt_behall_nummer/ 发出 POST 请求,并尝试发送 numberToPort。但是我得到了一堆 cookie 和一个 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());
    }

【问题讨论】:

  • 您目前尝试使用的 Android 代码如何?
  • 太乱了,我的第一个安卓应用。如果我无法得到 emboss 的建议,将发布。

标签: java android http http-post


【解决方案1】:

这里是设置帖子参数的方法:

            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

【讨论】:

    【解决方案2】:

    如果您使用的是 HttpUrlConnection,那么 HttpUrlConnection#setFollowRedirects 可能就是您所追求的。将其设置为true 以使其自动解析重定向。使用setInstanceFollowRedirects(true) 更好,因为从安全角度来看,不赞成盲目地跟踪重定向(静态setFollowRedirects 会导致什么)。

    【讨论】:

    • 听起来不错,我一回到我的盒子就会尝试。它会像 ASIHTTPRequest 一样保留并发送回所有 cookie 吗?
    • 还没有回到我的盒子,但我查看了有关 cookie 的文档。我只需要这两行来让它自动为我处理 cookie 是否正确? CookieManager cookieManager = new CookieManager(); CookieHandler.setDefault(cookieManager);
    • 没有运气就试过了。没有输出,也没有例外。有关代码,请参阅顶部已编辑的帖子。
    猜你喜欢
    • 2012-07-10
    • 2023-03-22
    • 2015-03-08
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多