【问题标题】:Wrong response code happen when I request the URL using jsoup library当我使用 jsoup 库请求 URL 时发生错误的响应代码
【发布时间】:2019-12-10 18:55:21
【问题描述】:

我正在开发一个连接热点网络的 WI-Fi 应用程序。连接时,我想根据网络状态获取响应代码。假设,如果我的 SSID 名称类似于“MyHotspot”,我将其连接到我的手机中并检查它处于“需要身份验证/登录”状态的状态。在该状态下,我正在尝试使用 jsoup 解析器请求 URL。然后我得到了响应代码 302。这是正确的响应代码,但如果我的 SSID 处于“已连接”状态。那个时候也显示响应码302,错了。

我想接收基于 SSID 状态的响应代码。如果 SSID 处于 auth 状态,响应将出现 302。如果 SSID 处于连接状态,则响应将出现 200。这就是我想要的。

源代码:

try{
    URL url = new URL("http://microsenseindia.com");
    Connection.Response response = Jsoup.connect(String.valueOf(url)).timeout(10000).followRedirects(false).execute();
    //Connection.Response response = Jsoup.connect("http://microsenseindia.com").timeout(10000).execute();
    Log.d(TAG, "check_if_internet_available : " + response.statusCode());
} catch(Exception e) {
    Log.e(TAG, "Jsoup_Exception: "+e);
}

【问题讨论】:

    标签: java android jsoup


    【解决方案1】:

    首先是http 302的代码

    6.4.3. 302 Found

    302(Found)状态码表示目标资源驻留 暂时在不同的 URI 下。由于重定向可能是 偶尔更改,客户应继续使用有效的 未来请求的请求 URI。

    对于您的问题,也许此代码可以在不使用 URL 定义的情况下为您提供帮助:

        try{
            JsoupConnection.Response response = Jsoup.connect("http://microsenseindia.com")
                          .userAgent("Mozilla/5.0 (Windows NT 6.0) AppleWebKit/536.5 (KHTML, like 
                                          Gecko) Chrome/19.0.1084.46 Safari/536.5")
                          .timeout(100000)
                          .ignoreHttpErrors(true) 
                          .execute();
            Log.d(TAG, "check_if_internet_available : " + response.statusCode());
            }catch(Exception e){
                    Log.e(TAG, "Jsoup_Exception: "+e);
    }
    

    【讨论】:

    • 感谢您的回复...我尝试了您的代码...当我的 ssid 处于身份验证状态时它仅显示 200 个代码...对于 JsoupConnection.Response 我正在使用 Connection.Response... .JsouConnection 不适合我... @Charfi
    • 你可以在没有返回的时候添加一个条件,所以它与 200 不同
    【解决方案2】:

    也许你应该改变你的方法并使用 HttpURLConnection

    URL url = new URL("http://microsenseindia.com");
    HttpURLConnection connection = (HttpURLConnection)url.openConnection();
    connection.setRequestMethod("GET");
    connection.connect();
    
    int statusCode= connection.getResponseCode();
    

    【讨论】:

    • 是的,我也尝试过这种方式......无法正常工作同样的问题一次又一次地发生......
    • 您可以尝试更改 RequestMethod("Post") 吗?我可以查看返回日志吗?
    • D/Main2Activity: responseCode: 200 D/libc-netbsd: [getaddrinfo]: hostname=microsenseindia.com;服务名称=(空); app_pid=28169; app_uid=10568; ai_flags=1024; ai_family=0; ai_socktype=1 from prox result 0 D/Main2Activity: responseCode: 200
    • 这是我在 post 方法中请求时的响应...
    • 响应码:200就算是认证状态也来了……
    【解决方案3】:
     try {
                    while (true) {
                        sleep(1000);
                        final URL url;
                        try {
                            url = new URL("http://microsenseindia.com");
                            HttpURLConnection huc = (HttpURLConnection) url.openConnection();
                            huc.setInstanceFollowRedirects(true);
                            huc.setRequestMethod("POST");
                            huc.connect();
                            huc.setReadTimeout(5000);
                            huc.setConnectTimeout(5000);
                            int responseCode = huc.getResponseCode();
                            Log.d(TAG, "responseCode: "+responseCode);
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
    

    这就是我使用的 http 连接方法。

    【讨论】:

      猜你喜欢
      • 2011-07-18
      • 2022-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-05
      • 2011-10-31
      相关资源
      最近更新 更多