단일 웹 사이트에 액세스하기 위해 webview를 사용하는 JavaFX 응용 프로그램에 대한 자체 프로토콜 처리기를 작성하려고합니다. 내가 지금까지했던사용자 JavaFX WebView 프로토콜 처리기
내 사용자 정의 URLStreamHandlerFactory를
public class MyURLStreamHandlerFactory implements URLStreamHandlerFactory {
public URLStreamHandler createURLStreamHandler(String protocol) {
System.out.println("Protocol: " + protocol);
if (protocol.equalsIgnoreCase("http") || protocol.equalsIgnoreCase("https")) {
return new MyURLStreamHandler();
} else {
return new URLStreamHandler() {
@Override
protected URLConnection openConnection(URL u) throws IOException {
return new URLConnection(u) {
@Override
public void connect() throws IOException {
}
};
}
};
}
}
}
내 사용자 정의 URLStreamHandler의
public class MyURLStreamHandler extends java.net.URLStreamHandler{
protected HttpURLConnection openConnection(URL u){
MyURLConnection q = new MyURLConnection(u);
return q;
}
}
내 사용자 정의 HttpURLConnection의
public class MyURLConnection extends HttpURLConnection {
static int defaultPort = 443;
InputStream in;
OutputStream out;
Socket s;
publicMyURLConnection(URL url) {
super(url);
try {
setRequestMethod("POST");
} catch (ProtocolException ex) {
ex.printStackTrace();
}
}
public void setRequestProperty(String name, String value){
super.setRequestProperty(name, value);
System.out.println("Namee: " + name);
System.out.println("Value: " + value);
}
public String getRequestProperty(String name){
System.out.println("GET REQUEST: ");
return super.getRequestProperty(name);
}
public OutputStream getOutputStream() throws IOException {
OutputStream os = super.getOutputStream();
System.out.println("Output: " + os);
return os;
}
public InputStream getInputStream() throws IOException {
InputStream is = super.getInputStream();
System.out.println("INout stream: " + is);
return is;
}
@Override
public void connect() throws IOException {
}
@Override
public void disconnect() {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public boolean usingProxy() {
throw new UnsupportedOperationException("Not supported yet.");
}
나는 다음과 같은 오류가 응용 프로그램을 실행할 때 일부 헤더를 설정하는 것 같아요.
Jul 08, 2013 11:09:04 AM com.sun.webpane.webkit.network.URLLoader doRun
WARNING: Unexpected error
java.net.UnknownServiceException: protocol doesn't support input
at java.net.URLConnection.getInputStream(URLConnection.java:839)
at qmed.QMedURLConnection.getInputStream(MyURLConnection.java:67)
at java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:468)
at com.sun.webpane.webkit.network.URLLoader.receiveResponse(URLLoader.java:383)
at com.sun.webpane.webkit.network.URLLoader.doRun(URLLoader.java:142)
at com.sun.webpane.webkit.network.URLLoader.access$000(URLLoader.java:44)
at com.sun.webpane.webkit.network.URLLoader$1.run(URLLoader.java:106)
at com.sun.webpane.webkit.network.URLLoader$1.run(URLLoader.java:103)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.webpane.webkit.network.URLLoader.run(URLLoader.java:103)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
at java.util.concurrent.FutureTask.run(FutureTask.java:166)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:724)
내가 원하는 것은 주어진 요청에 대한 응답을 받고 그 이진 데이터를 읽는 것입니다. 프로토콜이 기본 프로토콜과 정확히 같은 방식으로 작동하고 지정된 응답음의 이진 데이터 만 확인하려고합니다. 내가 도대체 뭘 잘못하고있는 겁니까?
응용 프로그램이 URLConnections의 단점을 모두 수행하고 있습니다. 프로토콜이 http 또는 https 인 경우 사용자 정의 URLConnection 클래스로 HTTPURLConnection을 사용하고 MyURLStreamHandlerFactory에서 수행하는 것처럼 다른 프로토콜을 사용할 때 기본 URLStreamHandler를 시작하는 것이 맞습니까? 모든 프로토콜을 동일하게 처리하기 위해 MYURLConnection의 기본 URLConnection 클래스를 확장해야합니까?
어떤 도움이 많이
당신에게
감사이 프로젝트 위협하는 문제로 감상 할 수있다
좋은 답변입니다. 지금까지 나는 그것을 나의 필요에 가장 가깝게 발견했다. 하지만 내가 원하는 것은 모든 프로토콜을 포착하는 것이다. HTTP, HTTPS, file : // 개발자 콘솔에서 모든 요청을 볼 수있는 것과 같습니다. –
이것으로 무엇을 이루고자합니까? 어쩌면 네트워크 스니퍼/분석기 도구로 원하는 작업을 수행 할 수 있습니다. –
또 다른 도움이 될만한 것은 FirebugLite를 사용하는 것입니다 :''-이 코드를 귀하의 WebView 페이지 및 WebView에서 페이지를 디버깅 할 수 있습니다. 불행히도 FBLite에는 네트워크 탭이 없습니다. –