Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/183.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
URLConnection 404仅适用于Android,不适用于简单Java_Java_Android_Json_Networking - Fatal编程技术网

URLConnection 404仅适用于Android,不适用于简单Java

URLConnection 404仅适用于Android,不适用于简单Java,java,android,json,networking,Java,Android,Json,Networking,我正在外部托管服务器上获取JSON。我已经编写了两个单独的JUnit测试来测试网络请求,其中一个在Android环境中测试,另一个只运行标准的PC JUnit(不在Android上运行) 当我使用基于非Android的JUnit(简单java程序)测试时,URLConnection工作正常,我从URLConnection和JSON收到200的响应代码。然而,当我在Android设备上运行相同的静态函数时,我收到一个404的响应代码(找不到文件或位置)。url本身是经过编码的,不包含任何非ASCI

我正在外部托管服务器上获取JSON。我已经编写了两个单独的JUnit测试来测试网络请求,其中一个在Android环境中测试,另一个只运行标准的PC JUnit(不在Android上运行)

当我使用基于非Android的JUnit(简单java程序)测试时,URLConnection工作正常,我从URLConnection和JSON收到200的响应代码。然而,当我在Android设备上运行相同的静态函数时,我收到一个404的响应代码(找不到文件或位置)。url本身是经过编码的,不包含任何非ASCII字符

为了不向主机服务器发送垃圾邮件,我将url替换为 我尝试过的事情: 1.最初的实施:

    URL url = new URL("http://example.com/JSONLink");
    System.out.println(url);
    urlConnection = (HttpURLConnection) url.openConnection();
    urlConnection.setRequestMethod("GET");
    int problem = urlConnection.getResponseCode();
    urlConnection.connect();
    System.out.println("The error code is " + problem);
    InputStream inputStream = urlConnection.getInputStream();
此时,urlConnection抛出一个文件未找到错误。我也尝试过转换

    urlConnection.getInputStream();


错误流给了我一个HTML文件,说明服务器无法找到该文件。
2.确保Android清单包含Internet的用户权限

        <uses-permission android:name="android.permission.INTERNET" />
  • 使用OkiHTTP
  • 每一次尝试都会导致404错误。虽然我相信我理解404错误的含义,但我不明白为什么我在给它一个可以被任何浏览器访问的有效url(包括在手机/仿真器上使用chrome)时会得到它

    如果这个问题是服务器端的,有没有一种方法可以模拟浏览器来获取json


    提前感谢

    在这种情况下,通常建议的第一步是交叉检查服务器。这个答案是你的问题

    如果这个问题是服务器端的,有没有一种方法可以模拟浏览器来获取json

    对。您可以尝试这些chrome插件中的任何一个,以测试您的服务器是否能从您的浏览器中提供预期的响应

    1) 高级REST客户端

    2) 邮递员


    “错误流向我提供了一个HTML文件,说明服务器无法找到该文件”--要么您的URL输入不正确,要么服务器不喜欢该请求。检查服务器日志,查看与您的请求相关的内容。我无法直接访问服务器,因为它是由不知道我正在处理此问题的第三方运行的。我正在开发一个概念验证应用程序。因此,我认为我无法访问服务器日志。但是,我能够在发送到服务器之前打印出url,并且可以使用不同的浏览器到达目的地。“我没有直接访问服务器的权限,因为它是由第三方运行的,而第三方不知道我正在处理此问题”--那么您就没有可靠的方法来解决此问题。欢迎你玩带有用户代理值的游戏,试图“伪造”服务器,但你被黑客攻击的值可能会在将来停止工作。这让我解决了我的问题!我缺少一个头部accept:application/json,我在
    urlConnection.setRequestProperty(“accept”,“application/json”)行中添加了它这是关键!
    
            <uses-permission android:name="android.permission.INTERNET" />
    
    DefaultHttpClient httpClient = new DefaultHttpClient();
        HttpGet httpGet = new HttpGet("http://example.com/JSONLink");
        HttpResponse httpResponse = httpClient.execute(httpGet);
        HttpEntity httpEntity = httpResponse.getEntity();
        InputStream inputStream = httpEntity.getContent();