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

2014-11-24 08:07:28 · 作者: · 浏览: 0

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

Iterator it = parmMap.entrySet().iterator();
Nameva luePair[] param = new Nameva luePair[parmMap.size()];
int i = 0;
while (it.hasNext())
{
Entry parmEntry = (Entry) it.next();
param[i++] = new Nameva luePair((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, Nameva luePair[] 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表单提交,其中包含对跳转的解决。

摘自 XL.Liang