【问题标题】:How to follow a "page auto-redirection" to get the response code?如何按照“页面自动重定向”来获取响应代码?
【发布时间】:2011-01-04 02:22:39
【问题描述】:

我使用下面的代码来获取一个aspx页面的返回响应码

HttpConnection connection 
     = (HttpConnection) Connector.open("http://company.com/temp1.aspx" 
                                       + ";deviceside=true");
connection.setRequestMethod(HttpConnection.GET);
connection.setRequestProperty(HttpHeaders.HEADER_CONNECTION, "close");
connection.setRequestProperty(HttpHeaders.HEADER_CONTENT_LENGTH, "0");
int resCode = connection.getResponseCode();

它工作正常。 但是如果链接“http://company.com/temp1.aspx”自动重定向到另一个页面怎么办?假设“http://noncompany.com/temp2.aspx”? 如何获取从第二个链接(第一个链接重定向到的链接)返回的响应代码? 是否有类似“跟随重定向”来获取自动重定向到的页面的新响应?

提前致谢。

【问题讨论】:

    标签: blackberry java-me blackberry-jde rim-4.5 blackberry-os-v4.5


    【解决方案1】:

    我找到了解决方案, 有兴趣的可以看看:

    int resCode;
    String location = "http://company.com/temp1.aspx";
    while (true) {  
         HttpConnection connection = (HttpConnection) Connector.open(location + ";deviceside=true");
         connection.setRequestMethod(HttpConnection.GET);
         connection.setRequestProperty(HttpHeaders.HEADER_CONNECTION, "close");
         connection.setRequestProperty(HttpHeaders.HEADER_CONTENT_LENGTH, "0");
         resCode = connection.getResponseCode();
         if( resCode == HttpConnection.HTTP_TEMP_REDIRECT
              || resCode == HttpConnection.HTTP_MOVED_TEMP
              || resCode == HttpConnection.HTTP_MOVED_PERM ) {
              location = connection.getHeaderField("location").trim();
         } else {
              resCode = connection.getResponseCode();
              break;
         }
    }
    

    【讨论】:

    • 您可能想用 for 循环替换 while(true) 语句(最多尝试 5-10 次左右),以防止进入无限重定向循环,这种情况有时会因配置不正确而发生网络服务器或代理。
    • 感谢马克的评论。我认为还有另一种解决方案,例如通过将每个新位置(链接)添加到向量中来跟踪重定向链接,并且每当找到新的重定向链接时,代码应首先检查它是否存在于向量中,因为如果它在那里存在,它将导致循环无限重定向。感谢您的说明。
    【解决方案2】:

    您需要在基于响应代码的 HTTP 重定向之后的循环中编写 HttpConnection。

    响应中的 HTTP 标头“位置”应该为您提供一个新主机(也许它可以用来替换整个 URL)。

    HttpConnection.HTTP_MOVED_TEMPHttpConnection.HTTP_MOVED_PERM 是表示重定向的两个响应代码。

    【讨论】:

    • 谢谢伙计,我在发布我的解决方案后看到了你的答案。顺便说一句,还有另一个响应代码是 HttpConnection.HTTP_TEMP_REDIRECT 。再次感谢您的回复。我会将其标记为答案并向上。
    猜你喜欢
    • 1970-01-01
    • 2017-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-19
    • 1970-01-01
    • 2016-07-02
    • 1970-01-01
    相关资源
    最近更新 更多