0

我从服务器获取 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}

文件:

/?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}

主持人:

search.3taps.com

响应返回为 "success":true,但返回的对象存在差异。我对http不太了解,可能是什么原因造成的?

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

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

似乎是造成问题的原因。

4

1 回答 1

2

确保在为服务器设置 URL 时正确编码 URL 请求。空格、大括号和冒号都需要适当地转义。空格应为 %20 等。这可能会有所帮助:Java 中的 HTTP URL 地址编码


旧答案......评论表明这不会影响结果......所以向下移动。

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

服务器很有可能正在更改其响应以匹配您的 Java 代码公开的 UserAgent(默认情况下类似于“Java/1.7.0”。您可以通过几种方式更改此值。看看这个问题设置 java URLConnection 的用户代理并尝试使用 Mozilla 代理运行您的程序,看看是否得到不同的结果。

于 2013-08-25T23:40:11.233 回答