在我的Spring项目中尝试获取InputStream时出现Http 502错误

时间:2015-05-28 10:35:35

标签: java spring inputstream google-search-appliance

我正在使用第三方Java API在我的基于Spring的Web项目中从Google Search Appliance获取结果。 API构造的URL看起来是正确的。我已经通过API在Web浏览器上发送了一个生成URL的请求并且它正常工作(搜索结果正确返回)。此外,我已经尝试使用我创建的独立Java项目来获取InputStream,并且它也可以工作。当我试图在我的项目中获得结果时,问题出现了。它在创建InputStream的阶段崩溃并出现此错误:

java.io.IOException: Server returned HTTP response code: 502 for URL: http://myIP:80/search?access=p&output=xml&client=default_frontend&lr=lang_en&num=100&requiredfields=gsaentity_language%3AEnglish&site=default_site
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1626)
    at java.net.URL.openStream(URL.java:1037)
    at net.sf.gsaapi.GSAClient.search(Unknown Source)
    at net.sf.gsaapi.GSAClient.getGSAResponse(Unknown Source)
    at net.sf.gsaapi.GSAClient.getGSAResponse(Unknown Source)

到目前为止,我尝试过的东西对我不起作用:

  • 我使用了API的接口(覆盖)来处理HttpConnection并手动创建InputStream。通过此接口,可以将一些代理选项添加到HttpConnection。 (名为GSAClientDelegate的接口,方法为getResponseStream)
  • 我检查了API的代码,以防发现导致代理问题的东西等等。我找不到类似的东西。
  • 正如答案所述,我已经检查了收集,前端,代理方式表名称,他们没问题。否则我无法通过网络浏览器或独立的Java项目获得结果吗?

差不多有一个星期我一直面对这个恼人而又神秘的错误,我开始发疯了。

我该怎么办这个问题?

4 个答案:

答案 0 :(得分:1)

我终于找到了问题的基础。这是因为java.net.HttpUrlConnection API。它使用共享连接工厂,这可能会导致这样的错误。我用Apache HttpClient替换了它。并没有出现任何问题:

    import org.apache.http.HttpResponse;
    import org.apache.http.client.HttpClient;
    import org.apache.http.client.methods.HttpGet;
    .........
public InputStream getConnectionStream(String fullUrl){
        HttpClient client = new DefaultHttpClient();
        HttpGet request = new HttpGet(fullUrl);
        HttpResponse response = client.execute(request);
        InputStream is = response.getEntity().getContent();

        return is;
}

答案 1 :(得分:0)

首先,这是5xx error,因此问题不会(通常)在您控制的任何系统上。如果您一直收到此错误,那么您正在与之接口的第三方API提供商遇到技术问题,您应该尽快与他们联系。

由于您可能正在浏览a gateway or proxy,请考虑直接连接到您需要的资源。

答案 2 :(得分:0)

您最有可能在查询的参数中输入错字。

502错误通常意味着您尝试加载前端(因此请检查客户端/代理方式表参数)或集合(检查参数站点.default_site?如果您没有创建新的默认值,则默认为default_collection) #39; t存在。

答案 3 :(得分:0)

我也遇到了这个问题,事实证明我忘了在URL中编码一个空格(浏览器默默地为你做了)。用%20取代空间就行了...... 我没有尝试HttpClient,但它可以正确编码而不需要询问。