0

Apache httpComponents HttpClient クラスを使用して Webscarab プロキシ経由で Web ページに接続するメソッドがあります。メソッドは Apache Software Foundation hereから入手できます。以下は私の穴の方法です:

       public void HTTPGet(){
            //HttpHost proxy = new HttpHost("localhost", 8008);

            System.setProperty("http.proxyHost", "localhost");
            System.setProperty("http.proxyPort", "8008");

            HttpHost proxy = new HttpHost(System.getProperty("http.proxyHost", "localhost"),Integer.parseInt(System.getProperty("http.proxyPort", "8008")));
                
            DefaultHttpClient httpclient = new DefaultHttpClient();
            try {

                httpclient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY,
                        proxy);

                HttpHost target = new HttpHost("www.google.gr/", 80);
                HttpGet req = new HttpGet("/");

                System.out.println("executing request to " + target + " via "
                        + proxy);
                HttpResponse rsp = httpclient.execute(target, req); //here I get the exception as below
                HttpEntity entity = rsp.getEntity();

                System.out.println("----------------------------------------");
                System.out.println(rsp.getStatusLine());
                Header[] headers = rsp.getAllHeaders();
                for (int i = 0; i < headers.length; i++) {
                    System.out.println(headers[i]);
                }
                System.out.println("----------------------------------------");

                if (entity != null) {
                    System.out.println(EntityUtils.toString(entity));
                }

            } catch (IOException ex) {
                Logger.getLogger(WebBrowser.class.getName()).log(Level.SEVERE, null, ex);
            } 
            finally {
                // When HttpClient instance is no longer needed,
                // shut down the connection manager to ensure
                // immediate deallocation of all system resources
                httpclient.getConnectionManager().shutdown();
            }
      }

HttpResponse rsp = httpclient.execute(target, req);の前のprintln

これを返します:executing request to http://www.google.gr/:80 via http://localhost:8008

その後、以下の例外が発生します。

Nov 28, 2012 1:23:09 AM student.WebBrowser HTTPGet
SEVERE: null
org.apache.http.conn.HttpHostConnectException: Connection to http://localhost:8008 refused
at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:190)
at org.apache.http.impl.conn.ManagedClientConnectionImpl.open(ManagedClientConnectionImpl.java:294)
at org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:640)
at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:479)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:906)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:827)

Firefox、Chrome、JavaFX Webengine などの別のブラウザーからページにアクセスしようとすると、Webscarab が正しく干渉します。

前もって感謝します。

4

1 に答える 1

0

接続が拒否されているため、(接続しようとしている時点で) 接続しようとしているポートで WebScarab がリッスンしていないとしか思えません。

たとえば、WebScarab が実行されていないか、デフォルトの 8008 以外のポート、または localhost (127.0.0.1) への別のインターフェイスでリッスンするように WebScarab を構成しました。

コードは WebScarab と同じマシンで実行されていますか? そうでない場合は、ネットワーク経由で到達可能な実際のネットワーク インターフェイスを WebScarab にリッスンさせ、localhost の代わりにその IP アドレスを参照するようにコードを更新する必要があります。

于 2012-11-28T07:56:29.093 に答える