2014-05-06 77 views
1

查询我有一些与我正在做的实现有关。HTTP响应查询

当HTTP请求从客户端端口发送到服务器端口时,我知道 响应也被发回到同一个端口(端口到端口通信)。

在我的情况下,服务器将响应转发到带有查询字符串的URL到我们网络上的主机服务器。所以当使用URLConnection对象的InputStream读取响应时,得到的内容是与没有查询字符串的转发URL的Login页面相对应的HTML内容。

我怀疑这是因为我们的主机服务器修改了URL。

现在的问题是,在这种情况下,似乎有一个中间实体,它是我们的主机服务器的URL转发。因此,当我在InputStream中读取响应(由服务器转发的URL)时,我不确定以下2中的哪一个是实际发生的情况:

1.)响应是直接从外部服务器读取的因为这是一个端口到端口的通信),从该看到是的情况下的中间主机服务器接收

OR

2.)响应。

(如果第二个方案是正确的,将中间宿主服务器知道哪个客户端正确转发到响应?)

URL url = new URL(httpsURL); 
HttpsURLConnection urlConnection = (HttpsURLConnection) url 
       .openConnection(); 
urlConnection.setRequestMethod("POST"); 
urlConnection.setDoOutput(true); 
urlConnection.setDoInput(true); 
/// 
Omitting code for SSL 
/// 
String urlParameters = "CCNumber=4111111111111111"; 
DataOutputStream wr = new DataOutputStream(urlConnection.getOutputStream()); 
wr.writeBytes(urlParameters); 
wr.flush(); 
wr.close(); 

BufferedReader in = new BufferedReader(new InputStreamReader(
       urlConnection.getInputStream())); 
String inputLine; 
if (urlConnection.getResponseCode() == HttpsURLConnection.HTTP_OK){ 

while ((inputLine = in.readLine()) != null) { 
    System.out.println(inputLine); 
} 
} 
+0

向我们显示您的客户代码。 –

+0

附加了客户端代码..答案只不过是HTML页面内容.. – Baz

回答

1

,您会收到来自中间服务器的响应。

这听起来像您的中间服务器充当(reverseproxy server。当您向中间服务器发出请求时,它会向网络上的服务器发送请求(就像您描述的那样)。但是,“真实”的服务器通常不知道请求是由您发起的。特别是,它不知道您的IP地址或您发送请求的端口。它只知道知道的是中间(代理)服务器的IP地址和端口。另一方面,代理服务器仍然知道您发送请求的IP地址和端口。

因此,您将请求发送给代理,代理将其发送给“真实”服务器,真实服务器将其响应发送回代理,然后将代理发回给您。你和“真实”的服务器不直接相互通信。

+0

答案很有帮助,但由于缺乏足够的信誉,我无法投票。我有1个问题。获取I/P流后,我调用getURL()方法来查找重定向的URL,以找出它们发送的查询字符串。但是,似乎我得到的URL是我的中间服务器发送的URL,它会在主URL中添加会话标识信息。有什么方法可以找出服务器发送的原始URL是什么。我是否需要在中间服务器上设置一个过滤器来拦截传入的url模式,以便我可以访问由ext发送的查询字符串。服务器。 – Baz

+1

调用'getUrl()'仅返回您创建'URLConnection'的URL(参见[JavaDoc](http://docs.oracle.com/javase/7/docs/api/java/net/URLConnection.html #的getURL%28%29))。 您无法找到代理服务器从“真实”服务器请求的URL。但这正是代理的要点。从客户的角度来看,您所知道的所有代理服务器都是真正的服务器...... – PoByBolek