2014-09-26 65 views
2

我正在开发一个平板电脑应用程序,它需要连接到网站以收集在线内容。Android:与本地主机网站的HTTP连接

我已经看到,我们确实可以通过IP地址连接到本地系统上的Web服务器。

但是,我在我的系统上使用虚拟主机,以便使用虚拟域。

这是我的系统设置在apache httpd-vhosts.conf文件中像这样 -

# 
# Project wordpress dev site 
# 
<VirtualHost *:80> 
    DocumentRoot "C:/web/www/boutique" 
    ServerName boutique.project.dev 
</VirtualHost> 

与我的主机文件具有以下条目

127.0.0.1  boutique.project.dev  # project woocommerce site 

我使用的是HttpPostHttpClient类和我看不到我如何提供真实IP地址,同时仍然在URL请求中传输主机名。

所以,我需要知道的是如何使用虚拟地址" boutique.project.dev "从我的应用程序进行查询?

这可能吗?


编辑:

继一个评论,我需要让事情变得更清晰。

我想这样做代码。每次我们连接到某个站点时,该URL都会进行DNS查找以确定要使用的IP地址。我需要拦截并提供本地系统的IP地址。我已经看到代理使用HttpHost的一些示例,但我不清楚如何使用这个或甚至是相关的。

回答

0

这是我希望能避免一些无用的“撞墙撞墙”的解决方案,以满足那些可能有相同需求的您。

两个或三个步骤是必要的。

第一步:打开防火墙以允许连接。

  • 这显然是必要的,否则无论你做什么连接都不会做出。我使用Comodo,因此我在防火墙中添加了一条规则,允许来自本地局域网的所有连接。

第二步:告诉你的服务器,在我的情况下,apache监听它的IP地址。

  • 添加以下条目我httpd.conf文件:

    听[我的IP地址]:80

第3步:代码连接

的关键让这个工作是告诉哪个虚拟服务器是需要的。因此,没有进一步的细节无聊,这里是代码:

// setup the needed objects 
HttpClient client = new DefaultHttpClient(); 
// create the request using the IP address of the server machine 
HttpGet request = new HttpGet("http://[target ip address]:80/testpage.php"); 
// here is the code magic - manually set the host header 
request.setHeader(HttpHeaders.HOST, "boutique.project.dev"); 
// now execute the request 
HttpResponse response = client.execute(request); 
// read back the response as normal 
.... 

结果是Apache服务器将请求映射到虚拟主机。

我希望这对其他人有用!


哦,我差点忘了,别忘了在平板电脑上启用WiFi - 可以节省数小时的时间,为什么它不起作用!

0

我想你不这样做,除非你修改的Android设备主机文件(root权限)

这是一个类似的问题:Apache Virtual Host (Subdomain) access with different computer on LAN

你也可以设置一个DNS服务器在您的计算机(即bind9)并为你的apache虚拟主机设置条目并配置android以使用该DNS服务器。

+0

由于每次连接到一个URL都有一个DNS查找返回相应的IP地址,我正在寻找在我的代码中覆盖DNS查找的方法,而不是更改平板电脑设置。我会编辑我的问题,使其更清晰。 – Simon 2014-09-26 07:57:22