2014-09-26 71 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