我从服务器获取一个 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}
似乎是导致问题的原因。
最佳答案
在设置服务器的 URL 时,请确保正确编码 URL 请求。空格、大括号和冒号都需要适当转义。空格应该是 %20 等。这可能有帮助:HTTP URL Address Encoding in Java
<小时/>旧答案...评论表明这不会影响结果...所以向下移动。
服务器很可能会根据您所报告的“浏览器”类型来改变其行为。当连接到 HTTP 服务器时,您告诉服务器您的 UserAgent 是什么(通常对于浏览器来说,它类似于“Internet Explorer ....”或“Mozilla ...”或“Google Chome ...”。服务器将通常会定制请求的结果以适应用户代理(不同的 javascript 文件和 HTML 代码转到 IE 等)。这也是服务器将移动设备重新定向到网站的移动友好版本的方式。
服务器很可能正在更改它的响应以匹配 Java 代码公开的 UserAgent(默认类似于“Java/1.7.0”。您可以通过几种方式更改此值。有一个查看这个问题 Setting user agent of a java URLConnection 并尝试使用 Mozilla 代理运行您的程序,看看是否会得到不同的结果。
关于java - Http请求在浏览器中返回不同的响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18434753/