用Java模拟一个Post表单提交(302和301)

public String getPostResponse(String url, Map parmMap)
    {
        String response = null;
        PostMethod post = new PostMethod(url);
        HttpClient client = new HttpClient();

        Iterator it = parmMap.entrySet().iterator();
        NameValuePair[] param = new NameValuePair[parmMap.size()];
        int i = 0;
        while (it.hasNext())
        {
            Entry parmEntry = (Entry) it.next();
            param[i++] = new NameValuePair((String) parmEntry.getKey(), (String) parmEntry.getValue());
        }

        post.setRequestBody(param);

        try
        {
            int statusCode = client.executeMethod(post);
            if (statusCode == HttpStatus.SC_MOVED_PERMANENTLY || statusCode == HttpStatus.SC_MOVED_TEMPORARILY)
            {
                Header locationHeader = post.getResponseHeader("location");
                String location = null;
                if (locationHeader != null)
                {
                    location = locationHeader.getValue();
                    response = this.getPostResponse(location, param);//用跳转后的页面重新请求。   
                }
            }
            else if(statusCode == HttpStatus.SC_OK)
            {
                response= post.getResponseBodyAsString();
            }
        }
        catch (IOException ex)
        {
        }
        finally
        {
            post.releaseConnection();
        }
        return response;
    }
    
    public String getPostResponse(String url, NameValuePair[] param)
    {
        String response = null;
        PostMethod post = new PostMethod(url);
        HttpClient client = new HttpClient();

        post.setRequestBody(param);

        try
        {
            int statusCode = client.executeMethod(post);
            if (statusCode == HttpStatus.SC_MOVED_PERMANENTLY || statusCode == HttpStatus.SC_MOVED_TEMPORARILY)
            {
                Header locationHeader = post.getResponseHeader("location");
                String location = null;
                if (locationHeader != null)
                {
                    location = locationHeader.getValue();
                    response = this.getPostResponse(location, param);//用跳转后的页面重新请求。   
                }
            }
            else if(statusCode == HttpStatus.SC_OK)
            {
                response= post.getResponseBodyAsString();
            }
        }
        catch (IOException ex)
        {
        }
        finally
        {
            post.releaseConnection();
        }
        return response;
    }

以上是java模拟一个Post表单提交,其中包含对跳转的解决。

posted @ 2012-05-21 18:56  一筐  阅读(4380)  评论(1编辑  收藏  举报