Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java HTTP组件核心遵循重定向_Java_Http_Redirect_Core - Fatal编程技术网

Java HTTP组件核心遵循重定向

Java HTTP组件核心遵循重定向,java,http,redirect,core,Java,Http,Redirect,Core,我正试图找到一种方法让http组件遵循重定向,但在google上找不到任何重定向,所以我来这里寻求帮助 职能: public String GetSite(String site, String path) throws Exception { HttpParams params = new SyncBasicHttpParams(); HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1); HttpPr

我正试图找到一种方法让http组件遵循重定向,但在google上找不到任何重定向,所以我来这里寻求帮助 职能:

public String GetSite(String site, String path) throws Exception {

    HttpParams params = new SyncBasicHttpParams();
    HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
    HttpProtocolParams.setContentCharset(params, "UTF-8");
    HttpProtocolParams.setUserAgent(params, "HttpComponents/1.1");
    HttpProtocolParams.setUseExpectContinue(params, true);

    HttpProcessor httpproc = new ImmutableHttpProcessor(new HttpRequestInterceptor[]{
                // Required protocol interceptors
                new RequestContent(),
                new RequestTargetHost(),
                // Recommended protocol interceptors
                new RequestConnControl(),
                new RequestUserAgent(),
                new RequestExpectContinue()});

    HttpRequestExecutor httpexecutor = new HttpRequestExecutor();

    HttpContext context = new BasicHttpContext(null);
    HttpHost host = new HttpHost(site, 80);

    DefaultHttpClientConnection conn = new DefaultHttpClientConnection();
    ConnectionReuseStrategy connStrategy = new DefaultConnectionReuseStrategy();

    context.setAttribute(ExecutionContext.HTTP_CONNECTION, conn);
    context.setAttribute(ExecutionContext.HTTP_TARGET_HOST, host);

    try {

        String[] targets = {
            path};

        for (int i = 0; i < targets.length; i++) {
            if (!conn.isOpen()) {
                Socket socket = new Socket(host.getHostName(), host.getPort());
                conn.bind(socket, params);
            }
            BasicHttpRequest request = new BasicHttpRequest("GET", targets[i]);
            request.setParams(params);
            httpexecutor.preProcess(request, httpproc, context);
            HttpResponse response = httpexecutor.execute(request, conn, context);
            response.setParams(params);
            httpexecutor.postProcess(response, httpproc, context);

            if (!connStrategy.keepAlive(response, context)) {
                conn.close();
            } else {
            }
            return (EntityUtils.toString(response.getEntity()));

        }
    } finally {
        conn.close();
    }
    return null;

}
publicstringgetsite(stringsite,stringpath)引发异常{
HttpParams params=新的SyncBasicHttpParams();
HttpProtocolParams.setVersion(params,HttpVersion.HTTP_1_1);
HttpProtocolParams.setContentCharset(参数,“UTF-8”);
setUserAgent(params,“HttpComponents/1.1”);
HttpProtocolParams.setUseExpectContinue(params,true);
HttpProcessor httpproc=新的不可变HttpProcessor(新的HttpRequestInterceptor[]{
//所需的协议拦截器
新建RequestContent(),
新建RequestTargetHost(),
//推荐的协议拦截器
新建RequestConnControl(),
新建RequestUserAgent(),
新的RequestExpectContinue()});
HttpRequestExecutor httpexecutor=新的HttpRequestExecutor();
HttpContext=新的BasicHttpContext(null);
HttpHost主机=新的HttpHost(站点,80);
DefaultHttpClientConnection conn=新的DefaultHttpClientConnection();
ConnectionReuseStragey connStrategy=新的默认ConnectionReuseStragey();
setAttribute(ExecutionContext.HTTP_连接,conn);
setAttribute(ExecutionContext.HTTP_TARGET_HOST,HOST);
试一试{
字符串[]目标={
路径};
for(int i=0;i

有什么帮助吗?因为我找不到任何东西…

我建议您使用基本的
DefaultHttpClient
,它支持重定向而无需任何调整或附加代码。其行为可由中描述的4个参数控制

如果您真的不想依赖于
httpcomponents客户端
,而只想依赖
httpcomponents核心
,那么您必须选择并创建自己的代码来解析响应,确定它是否是有效的重定向(仔细阅读HTTP规范,这并不是那么简单),并在需要时触发循环中的新请求


我的意见是:没有理由再编写如此复杂的代码,总有一天会需要身份验证,您也必须添加这种支持。因此,只需依赖HttpClient。

您确定需要这些复杂的代码吗?通常有效。第一个(响应处理)示例遵循重定向默认值。已经使用urlconnector修复了它。在这种情况下,您应该做出新的回答并接受它。我可以帮助其他人解决同样的问题,而其他人不会再为你解决。Cakestep,你能发布你的解决方案吗。我带着同样的问题来到这里。你是在特定的Android环境中吗?