我正在连接到服务器,该服务器首先进入auth登录页面,然后重定向.
ClientConfig config = new DefaultClientConfig();
config.getProperties().put(ClientConfig.PROPERTY_FOLLOW_REDIRECTS, true);
Client client = Client.create(config);
client.setFollowRedirects(true);
WebResource service = client.resource(UriBuilder.fromUri(url).build());
String output = service.path(resource)
.path(model)
.path(id)
.accept(MediaType.APPLICATION_JSON)
.get(String.class);
Run Code Online (Sandbox Code Playgroud)
这是一个例外:
线程"ThreadJob"中的异常com.sun.jersey.api.client.UniformInterfaceException:GET https:// url 在com.sun.jersey.api.client.WebResource.handle(WebResource.java中返回的响应状态为302) 688)at com.sun.jersey.api.client.WebResource.access $ 200(WebResource.java:74)at com.sun.jersey.api.client.WebResource $ Builder.get(WebResource.java:509)
泽西岛版本1.19
我发现经常泽西很糟糕.您几乎认为他们意味着您要做这类事情并且他们添加"followRedirect"选项以简单地混淆用户.
import static org.junit.Assert.*;
import java.util.logging.Logger;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.UriBuilder;
import org.junit.Test;
import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.UniformInterfaceException;
import com.sun.jersey.api.client.WebResource;
import com.sun.jersey.api.client.config.ClientConfig;
import com.sun.jersey.api.client.config.DefaultClientConfig;
import com.sun.jersey.api.client.filter.ClientFilter;
import com.sun.jersey.api.client.filter.LoggingFilter;
public class TestJerseyRedirect {
@Test
public void test() {
ClientConfig config = new DefaultClientConfig();
config.getProperties().put(ClientConfig.PROPERTY_FOLLOW_REDIRECTS, true);
com.sun.jersey.api.client.Client client = Client.create(config);
client.setFollowRedirects(true);
LoggingFilter logging = new LoggingFilter(Logger.getAnonymousLogger());
WebResource service = client.resource(UriBuilder.fromUri("http://mail.google.com").build());
service.addFilter(logging);
try {
String output = service.path("mail")
.accept(MediaType.TEXT_HTML)
.get(String.class);
System.out.println(output);
} catch (UniformInterfaceException e) {
if (e.getResponse().getStatus() == 302) {
String location = e.getResponse().getHeaders().getFirst("Location");
WebResource service2 = client.resource(UriBuilder.fromUri(location).build());
service2.addFilter(logging);
String output2 = service2
.accept(MediaType.TEXT_HTML)
.get(String.class);
System.out.println(output2);
}
else {
e.printStackTrace();
throw e;
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
这将是有效的,但显然不是正确的方法.这不是更糟糕,但是当存在多个重定向等时可能会给你带来麻烦.
@Test
public void testGoodWay() throws Exception {
ClientConfig config = new DefaultClientConfig();
config.getProperties().put(ClientConfig.PROPERTY_FOLLOW_REDIRECTS, true);
com.sun.jersey.api.client.Client client = Client.create(config);
client.setFollowRedirects(true);
LoggingFilter logging = new LoggingFilter(Logger.getAnonymousLogger());
WebResource service = client.resource(UriBuilder.fromUri("http://mail.google.com").build());
service.addFilter(logging);
service.addFilter(new RedirectFilter());
try {
String output = service.path("mail")
.accept(MediaType.TEXT_HTML)
.get(String.class);
System.out.println(output);
} catch (Exception e) {
e.printStackTrace();
}
}
class RedirectFilter extends ClientFilter {
@Override
public ClientResponse handle(ClientRequest cr) throws ClientHandlerException {
ClientHandler ch = getNext();
ClientResponse resp = ch.handle(cr);
if (resp.getClientResponseStatus().getFamily() != Response.Status.Family.REDIRECTION) {
return resp;
}
else {
// try location
String redirectTarget = resp.getHeaders().getFirst("Location");
cr.setURI(UriBuilder.fromUri(redirectTarget).build());
return ch.handle(cr);
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5178 次 |
| 最近记录: |