Java 浏览器中返回不同响应的Http请求

Java 浏览器中返回不同响应的Http请求,java,android,json,http,Java,Android,Json,Http,我正在从服务器获取一个JSON对象,当我在浏览器中输入以下生成的URL时,我会得到一个带有“num_match”的响应:18,但是在我的应用程序中运行时,我会得到一个带有“num_matches”的JSON对象:2 URL对象是这样创建的 URL request; request = new URL(url); 和这样的连接: HttpURLConnection connection = (HttpURLConnection) request.openConnection(); con

我正在从服务器获取一个JSON对象,当我在浏览器中输入以下生成的URL时,我会得到一个带有“num_match”的响应:18,但是在我的应用程序中运行时,我会得到一个带有“num_matches”的JSON对象:2

URL对象是这样创建的

URL request;
request = new URL(url);
和这样的连接:

HttpURLConnection connection = (HttpURLConnection) request.openConnection();
    connection.setConnectTimeout(MAX_TIME);
    connection.setReadTimeout(MAX_TIME);
url是一个字符串,我正在将字符串内容复制到浏览器中进行测试

字符串为:

http://search.3taps.com/?auth_token=xxxxxxxxxxxxxxxxxx&retvals=heading,body,timestamp,external_url,images,price&rpp=100&source=BKPGE|CRAIG|EBAYC|INDEE|KIJIJ&category=PWSM&radius=200mi&lat=26.244&long=-80.2&annotations={age:18 OR age:19 OR age:20 OR age:21 OR age:22}
URL对象具有以下字段

查询:

auth_token=xxxxxxxxxxxxxxxxxx&retvals=heading,body,timestamp,external_url,images,price&rpp=100&source=BKPGE|CRAIG|EBAYC|INDEE|KIJIJ&category=PWSM&radius=200mi&lat=26.244&long=-80.2&annotations={age:18 OR age:19 OR age:20 OR age:21 OR age:22}
文件:

主持人:

响应返回为“success”:两个都为true,但返回的对象存在差异。我对http了解不多,是什么导致了这种情况

更新:在进一步的测试中,似乎只有注释条目存在时才有问题

annotations={age:18 OR age:19 OR age:20 OR age:21 OR age:22}

似乎是问题的原因。

设置服务器的URL时,请确保正确编码URL请求。空格、大括号和冒号都需要适当转义。空格应为%20等。这可能有助于:


老答案。。。。注释表明这不会影响结果。。。所以往下走

很可能服务器正在根据您报告的“浏览器”类型更改其行为。当连接到HTTP服务器时,您会告诉服务器您的用户代理是什么(通常对于浏览器来说,它类似于“Internet Explorer…”或“Mozilla…”或“Google Chome…”。服务器通常会定制请求的结果以适配用户代理(不同的javascript文件和HTML代码进入IE等)。这也是服务器将移动设备重新定向到站点的移动友好版本的方式


很可能服务器正在更改其响应以匹配Java代码公开的用户代理(Decoult称之为“Java/1.7.0”)。您可以通过几种方式更改此值。请查看此问题,并尝试使用Mozilla代理运行您的程序,看看是否得到不同的结果。

我从该链接尝试了两种方法,但结果仍然相同。请参阅原始帖子的更新。更新的答案,检查您是否正确编码了请求。哦,是的,一定是这样浏览器正在添加转义码,它将在几分钟内进行测试
search.3taps.com
annotations={age:18 OR age:19 OR age:20 OR age:21 OR age:22}