【问题标题】:Http request returning different response in browserHttp请求在浏览器中返回不同的响应
【发布时间】:2013-08-25 23:29:02
【问题描述】:

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

响应返回“成功”:两者都为真,但返回的对象存在差异。我对http不太了解,这可能是什么原因造成的?

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

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

似乎是导致问题的原因。

【问题讨论】:

    标签: java android json http


    【解决方案1】:

    确保在为服务器设置 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 代理运行您的程序,看看是否会得到不同的结果。

    【讨论】:

    • 我尝试了该链接中的两种方法,但结果仍然相同。查看原始帖子的更新。
    • 更新答案,检查您是否正确编码请求。
    • 哦是的,一定是的,浏览器正在添加转义码,过会测试
    猜你喜欢
    • 1970-01-01
    • 2021-03-09
    • 1970-01-01
    • 2018-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-19
    • 2015-12-05
    相关资源
    最近更新 更多