Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用套接字的Java代理_Java_Html_Http_Http Proxy - Fatal编程技术网

使用套接字的Java代理

使用套接字的Java代理,java,html,http,http-proxy,Java,Html,Http,Http Proxy,根据我使用的浏览器的不同,我在代码中遇到了一些问题,IE中正确显示了URL,但在Firefox中显示为纯文本(例如,www.microsoft.es在IE上看起来不错,但在Firefox上看不到)。 我不知道我做错了什么,我认为我使用的标题有问题,但我不确定 代码如下: import java.io.*; import java.net.*; import java.util.concurrent.*; public class Server { public void startSe

根据我使用的浏览器的不同,我在代码中遇到了一些问题,IE中正确显示了URL,但在Firefox中显示为纯文本(例如,www.microsoft.es在IE上看起来不错,但在Firefox上看不到)。 我不知道我做错了什么,我认为我使用的标题有问题,但我不确定

代码如下:

import java.io.*;
import java.net.*;
import java.util.concurrent.*;


public class Server { 


public void startServer() {
    final ExecutorService clientProcessingPool = Executors.newFixedThreadPool(10);

    Runnable serverTask = new Runnable() {
        @Override
        public void run() {
            try {
                @SuppressWarnings("resource")
                ServerSocket serverSocket = new ServerSocket(8080);
                while (true) {
                    Socket clientSocket = serverSocket.accept();
                    clientProcessingPool.submit(new ClientTask(clientSocket));
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    };
    Thread serverThread = new Thread(serverTask);
    serverThread.start();

}

private class ClientTask implements Runnable {
    private Socket clientSocket;

    private ClientTask(Socket clientSocket) {
        this.clientSocket = clientSocket;
    }


    @Override
    public void run() {

        try {


            BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
            BufferedOutputStream out = new BufferedOutputStream(clientSocket.getOutputStream());

            String url = null;
            int i=0;
            String [] headers = new String [100];
            String buffer;

            while ((buffer = in.readLine()) != null) {
                headers[i]=buffer;
                i++;

                if(buffer.contains("GET"))
                {
                    String[] splitText = buffer.split(" ");
                    url = splitText[1];
                    }
                if(buffer.contains("POST"))
                {
                    String[] splitText = buffer.split(" ");
                    url = splitText[1];
                    }
                if(buffer.contains("CONNECT"))
                {
                    String[] splitText = buffer.split(" ");
                    url = "https://"+splitText[1];
                    }
                if (buffer.isEmpty()) break;
                }

                    URL u = new URL(url);
                    URLConnection connection = u.openConnection();

                    for (int x=1;x<i-1;x++){
                    if (!headers[x].contains("Accept-Encoding:")){
                        connection.setRequestProperty(headers[x].substring(0, headers[x].indexOf(":")).toString() , headers[x].replace(headers[x].substring(0, headers[x].indexOf(":") +2), "").toString());
                    }
                    }

                    boolean redirect = false;

                    int status = ((HttpURLConnection) connection).getResponseCode();
                    if (status != HttpURLConnection.HTTP_OK) {
                        if (status == HttpURLConnection.HTTP_MOVED_TEMP || status == HttpURLConnection.HTTP_MOVED_PERM || status == HttpURLConnection.HTTP_SEE_OTHER)
                        redirect = true;
                    }


                    if (redirect) {

                        String Url = connection.getHeaderField("Location");
                        URL urlloc = new URL(Url);
                        connection = urlloc.openConnection();

                        for (int x=1;x<i-1;x++){

                            if (!headers[x].contains("Accept-Encoding:")){
                                connection.setRequestProperty(headers[x].substring(0, headers[x].indexOf(":")).toString() , headers[x].replace(headers[x].substring(0, headers[x].indexOf(":") +2), "").toString());
                            }
                            }
                    }


                        byte[] chunk = new byte[1024];
                        int bytesRead;
                        InputStream stream;
                        stream = connection.getInputStream();
                        while ((bytesRead = stream.read(chunk)) > 0) {
                            out.write(chunk, 0, bytesRead);
                            out.flush();
                        }


                out.close();
                in.close();
                clientSocket.close();


        } catch (Exception e) {
            e.printStackTrace();

        } 
    }
}
import java.io.*;
导入java.net。*;
导入java.util.concurrent.*;
公共类服务器{
public void startServer(){
final ExecutorService clientProcessingPool=Executors.newFixedThreadPool(10);
Runnable serverTask=new Runnable(){
@凌驾
公开募捐{
试一试{
@抑制警告(“资源”)
ServerSocket ServerSocket=新的ServerSocket(8080);
while(true){
Socket clientSocket=serverSocket.accept();
提交(新的ClientTask(clientSocket));
}
}捕获(IOE异常){
e、 printStackTrace();
}
}
};
线程serverThread=新线程(serverTask);
serverThread.start();
}
私有类ClientTask实现可运行{
私有套接字clientSocket;
专用客户端任务(套接字客户端套接字){
this.clientSocket=clientSocket;
}
@凌驾
公开募捐{
试一试{
BufferedReader in=新的BufferedReader(新的InputStreamReader(clientSocket.getInputStream());
BufferedOutputStream out=新的BufferedOutputStream(clientSocket.getOutputStream());
字符串url=null;
int i=0;
字符串[]头=新字符串[100];
字符串缓冲区;
而((buffer=in.readLine())!=null){
头[i]=缓冲区;
i++;
if(buffer.contains(“GET”))
{
String[]splitText=buffer.split(“”);
url=splitText[1];
}
if(buffer.contains(“POST”))
{
String[]splitText=buffer.split(“”);
url=splitText[1];
}
if(buffer.contains(“CONNECT”))
{
String[]splitText=buffer.split(“”);
url=“https://”+splitText[1];
}
if(buffer.isEmpty())中断;
}
URL u=新的URL(URL);
URLConnection=u.openConnection();

对于(int x=1;x我不确定问题是什么,但您应该使用Wireshark之类的工具检查浏览器和代理之间的实际网络流量,并将其与直接连接到站点时浏览器和站点之间的网络流量进行比较。

我不知道,我没有注意到任何问题(除了那不是我误解和删除的问题的东西),但显然肯定有一个bug,否则为什么它不起作用呢?不,我没有这么说。我说,我找不到bug,但可能某个地方有bug。可能有。使用Wireshark调查问题。