我正在使用第三方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)
到目前为止,我尝试过的东西对我不起作用:
差不多有一个星期我一直面对这个恼人而又神秘的错误,我开始发疯了。
我该怎么办这个问题?
答案 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,但它可以正确编码而不需要询问。