用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表单提交,其中包含对跳转的解决。