나는 프록시 서버를 구축하고 훌륭하게 작동하지만 그는 처리 할 수없는 사이트가 있습니다. 문제를 핵심으로 줄이려고 시도한 결과, 다음과 같이 나타났습니다. 내 테스트 사례는 각 위키피디아 페이지에서 전송되는 http 메시지 중 하나 인 http://bits.wikimedia.org/en.wikipedia.org/load.php 입니다. 그래서 나는 그것을 위해 요청을 구축하고 같은 소켓을 통해 그것을 보내려고 : HTTP 1.1 request line
String request1 =
"GET http://bits.wikimedia.org/en.wikipedia.org/load.php HTTP/1.1" +
"\r\n" +
"Host: bits.wikimedia.org" + "\r\n" +
"User-Agent: MyHttpProxy/example.java (http://stackoverflow.com/q/5924490/319266)" +
"\r\n" + "\r\n";
그러나 내가 404 리턴 코드 있어요 -이 페이지가 존재하기 때문에 이상한! 내가 할려고 많이했다 만 요청 행 달랐다 새로운 요청했다 :
String request2 =
"GET /en.wikipedia.org/load.php HTTP/1.1" +
"\r\n" +
"Host: bits.wikimedia.org" +
"\r\n" +
"User-Agent: MyHttpProxy/example.java (http://stackoverflow.com/q/5924490/319266)" +
"\r\n" + "\r\n";
를하고 일했다! 좋은 200은 일부 중요하지 않은 콘텐츠 ("/ * 요청한 모듈이 없습니다. * /"여기에 넣었습니다 */")
아무도 나에게 무슨 문제가 있다고 말할 수 있습니까? 내가 RFC를 쳐다 보면서 나는이 모든 이유를 만들 couldnt는 ...
Here이 테스트를 실행하기위한 소스 코드와 resuls 인쇄 :
기술적으로 서버는 절대 구문을 허용하지만 많은 서버는이를 받아 들일 수 없습니다. – EricLaw
안녕하세요. 우선 응답에 감사드립니다. 내 요청이 서버를 통과하는지 어떻게 알 수 있습니까? 내가 "투명한"프록시 서버를 만들고 싶다고 가정 해 봅시다. 어떻게하면 내 요청이 프록시로 보내지는지 또는 원산지로 직접 갈지를 알 수 있습니까? 예 : "http://www.youtube.com/watch?v=IytNBm8WA1c"및 위 내용을 참조하십시오. BTW : 나는 15 포인트를 stackoverflow 따라서 나는 여전히 useull로 답변을 표시 할 수 없다 (하지만 그것입니다!) – talel
안녕. 투명한 프록시 서버를 작성하는 경우 실제로는 클라이언트 수준에서 구분할 수 없습니다. 투명성의 전체 요점입니다. 이 경우 대부분의 회신은 적용되지 않습니다. 프록시를 직접 작성하는 경우 로그에 요청을 보았는지 여부를 확인해야합니다. 또는 트래픽 캡처를 수행하여 피어 IP가 프록시 또는 원 서버 중 하나인지 확인할 수 있습니다. – RomanK