有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

如何在HttpClient(java、apache)中自动重定向

我创建httpClient并设置设置

HttpClient client = new HttpClient();

client.getParams().setCookiePolicy(CookiePolicy.BROWSER_COMPATIBILITY);
client.getParams().setContentCharset("UTF-8");

第一个请求(get)

GetMethod first = new GetMethod("http://vk.com");
int returnCode = client.executeMethod(first);

BufferedReader br = null;
String lineResult = "";
if (returnCode == HttpStatus.SC_NOT_IMPLEMENTED) {
    System.err.println("The Post method is not implemented by this URI");
    // still consume the response body
    first.getResponseBodyAsString();
} else {
    br = new BufferedReader(new InputStreamReader(first.getResponseBodyAsStream(), Charset.forName("windows-1251")));
    String readLine = "";
    while (((readLine = br.readLine()) != null)) {
        lineResult += readLine;
    }
}

回答正确

第二项要求(职位):

PostMethod second = new PostMethod("http://login.vk.com/?act=login");

second.setRequestHeader("Referer", "http://vk.com/");

second.addParameter("act", "login");
second.addParameter("al_frame", "1");
second.addParameter("captcha_key", "");
second.addParameter("captcha_sid", "");
second.addParameter("expire", "");
second.addParameter("q", "1");
second.addParameter("from_host", "vk.com");
second.addParameter("email", email);
second.addParameter("pass", password);

returnCode = client.executeMethod(second);

br = null;
lineResult = "";
if (returnCode == HttpStatus.SC_NOT_IMPLEMENTED) {
    System.err.println("The Post method is not implemented by this URI");
    // still consume the response body
    second.getResponseBodyAsString();
} else {
    br = new BufferedReader(new InputStreamReader(second.getResponseBodyAsStream()));
    String readLine = "";
    while (((readLine = br.readLine()) != null)) {
        lineResult += readLine;
    }
}

这个回答也是正确的,但我需要被重定向到标题。地点

我不知道如何从标题位置获取值,或者如何自动启用重定向


共 (4) 个答案

  1. # 1 楼答案

    您只需添加以下内容:

    second.setFollowRedirects(true);
    
  2. # 2 楼答案

    以3为例。在HttpClient的x版本中,您还可以检查响应代码是301还是302,然后使用位置标题重新发布:

    client.executeMethod(post);
    int status = post.getStatusCode();
    if (status == 301 || status == 302) {
      String location = post.getResponseHeader("Location").toString();
      URI uri = new URI(location, false);
      post.setURI(uri);
      client.executeMethod(post);
    }
    
  3. # 3 楼答案

    由于设计限制,HttpClient 3。x无法自动处理包含POST和PUT等请求的实体重定向。您必须手动将POST请求转换为GET-On重定向,或者升级到HttpClient 4。x、 它可以自动处理所有类型的重定向

  4. # 4 楼答案

    此外,您还可以使用LaxRedirectStrategy