尝试使用GWT应用程序进行跨域请求时,在chrome上获取此错误。
Origin http://127.0.0.1:8888 is not allowed by Access-Control-Allow-Origin.
我尝试了以下代码来发送GET请求。
import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.http.client.Request;
import com.google.gwt.http.client.RequestBuilder;
import com.google.gwt.http.client.RequestCallback;
import com.google.gwt.http.client.RequestException;
import com.google.gwt.http.client.Response;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.RootPanel;
public class Detracker implements EntryPoint {
public void onModuleLoad() {
doGet("http://www.google.com");
}
public static void doGet(String url) {
RequestBuilder builder = new RequestBuilder(RequestBuilder.GET, url);
try {
builder.sendRequest(null, new RequestCallback() {
public void onError(Request request, Throwable exception) {
// Code omitted for clarity
}
@Override
public void onResponseReceived(Request request,
Response response) {
final Label msgLabel = new Label();
msgLabel.setText(response.getText());
RootPanel.get("resultContainer").add(msgLabel);
}
});
} catch (RequestException e) {
// Code omitted for clarity
}
}
}
答案 0 :(得分:2)
使用JSONP进行跨域请求。 (但是存在一些限制 - 你只能使用GET方法)
另一种方法是使用GWT的servlet获取请求结果并将其返回给客户端。还存在一些使用iframe的黑客攻击,html5也可以进行跨域请求。
答案 1 :(得分:1)
我一直在努力,并提出了这个有效的解决方案。 :)
String message = "";
try {
URL url = new URL("working-url");
URLConnection urlConn = url.openConnection();
urlConn.setReadTimeout(100000);
BufferedReader reader = new BufferedReader(new InputStreamReader(urlConn.getInputStream()));
String line;
while ((line = reader.readLine()) != null) {
message = message.concat(line);
}
reader.close();
} catch (MalformedURLException e) {
message = e.getMessage();
} catch (IOException e) {
message = e.getMessage();
}
答案 2 :(得分:0)