HttpURLConnection 没有按预期响应

HttpURLConnection does not respond as expected

我创建了一个免费托管帐户,我在其中获得了一个可以使用任何浏览器访问的免费域名。我可以在该网站上传文件。我已经正确配置了数据库。现在,我上传了以下 php 文件,代码如下:

<?php

    require_once('connection.php');

    $sql = 'SELECT date FROM Khatams';
    $result = $conn->query($sql);

    $khatam_dates = array();

    if ($result->num_rows > 0) {
        // output data of each row
        while($row = $result->fetch_assoc()) {
            $khatam_dates[] = $row['date'];
        }
    } else {
        //echo "0 results";
    }

    echo json_encode($khatam_dates, JSON_FORCE_OBJECT);

    $conn->close();

?>

而且我可以直接从浏览器访问此文件并按预期获得 json 对象。但是当我使用以下代码通过 Java 发送 GET 请求时:

URL url = new URL(SERVER_ADDRESS + file);
HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();

InputStream in = new BufferedInputStream(httpURLConnection.getInputStream());
BufferedReader reader = new BufferedReader(new InputStreamReader(in));

StringBuilder stringBuilder = new StringBuilder();
String line, result;

try {
    while ((line = reader.readLine()) != null) {
        stringBuilder.append(line + "\n");
    }
    reader.close();
} catch (IOException e) {
    e.printStackTrace();
}
result = stringBuilder.toString();
System.out.println(result);

我收到以下回复:(我对其进行了格式化;未格式化转储字符串)

<html>
    <body>
        <script type="text/javascript" src="/aes.js">
        </script>
        <script>
            function toNumbers(d){
                var e=[];
                d.replace(/(..)/g,function(d){e.push(parseInt(d,16))});
                return e
            }
            function toHex(){
                for(var d=[],d=1==arguments.length&&arguments[0].constructor==Array?arguments[0]:arguments,e="",f=0;f<d.length;f++)
                e+=(16>d[f]?"0":"")+d[f].toString(16);
                return e.toLowerCase()
            }

            var a=toNumbers("f655ba9d09a112d4968c63579db590b4"),b=toNumbers("98344c2eee86c3994890592585b49f80"),c=toNumbers("c32982e0cee9e5da81856753a7aef5ed");
            document.cookie="__test="+toHex(slowAES.decrypt(c,2,a,b))+";
            expires=Thu, 31-Dec-37 23:55:55 GMT;
            path="/";
            document.cookie="referer="+escape(document.referer);
            location.href="http://ashubuntu.byethost9.com/fetch_khatam_dates.php?ckattempt=1";
        </script>
        <noscript>
            This site requires Javascript to work, please enable Javascript in your browser or use a browser with Javascript support
        <noscript>
    </body>
</html>

出现这种反应的原因是什么?我对以下代码片段特别感兴趣:

<noscript>
    This site requires Javascript to work, please enable Javascript in your browser or use a browser with Javascript support
<noscript>

看起来主机在将您重定向到您的实际页面之前设置了某种跟踪 cookie。

尝试从 Java 访问 http://ashubuntu.byethost9.com/fetch_khatam_dates.php?ckattempt=1,看看是否可以通过这种方式解决问题。

编辑: 看起来像您发布的页面源中 URL 的 ?ckattempt=1 部分是用来计算重定向的尝试次数以检查是否确实设置了cookie。

您可能不走运 - 这是您为使用免费托管所付出的代价。我能想到的唯一方法是让网站相信您设置了 cookie(我不确定如何做到这一点,您必须 Java 发送正确的 plausible-looking cookie HTTP header).

中的名称