Come posso reindirizzare le richieste HTTP fatte da un iPad?


116

Dato che su un iPad non possiamo modificare il file hosts (senza jailbreak), come possiamo reindirizzare arbitrariamente il traffico web a un altro URL?

Ciò sarebbe importante per qualcosa come lo sviluppo di un sito Web che utilizza una configurazione di host virtuale in cui si desidera reindirizzare a una macchina di sviluppo.

(Questo è correlato a questa domanda: posso modificare il file host di un iPad? )

Risposte:


88

Il modo per aggirare questa limitazione dell'iPad è utilizzare un server proxy HTTP, come Squid in esecuzione su un'altra macchina in cui è possibile modificare il file hosts.

Sull'iPad In Impostazioni -> Rete -> Wi-Fi -> (La tua rete) È disponibile un'impostazione proxy HTTP che può essere impostata su manuale. Immettere le informazioni sul proxy qui.

Una volta impostato, sarai in grado di manipolare l'iPad come se stessi modificando il file hosts.


3
Per la cronaca, direi che è abbastanza facile installare squid usando macports "sudo port install squid"
MiQUEL

1
o yum install squidsu fedora
Abhishek

3
o apt-get install squidsu Ubuntu
Jess Telford

3
Nota: ogni volta che modifichi il file hosts sul tuo server Squid, riavvia il servizio Squid per assicurarti che le modifiche abbiano effetto. Su Ubuntu questo è sudo service squid3 reload. Inoltre, e forse questo è un problema di configurazione specifico del mio server di sviluppo, sul mio iPad devo inserire manualmente http: // affinché la risoluzione degli indirizzi funzioni correttamente.
Andy Giesler

1
Un altro modo più semplice per farlo è con uno strumento che ho scritto: testProxy. Nessuna configurazione necessaria: github.com/edwinm/testProxy
edwin

71

Ho scoperto che devi solo modificare le impostazioni Wifi nel tuo iPad per utilizzare l'indirizzo IP della tua macchina di sviluppo come proxy HTTP (come spiegato nell'articolo sopra ):

inserisci qui la descrizione dell'immagine

In questo modo, è sufficiente poter accedere alla tua applicazione web sul tuo iPad inserendo l'url dell'host virtuale (es local.mywebapp.com.). È facile e veloce, ma a differenza della soluzione di Will Koehler, non sarai comunque in grado di accedere a Internet dall'iPad. Ma la maggior parte delle volte non è davvero un problema, dal momento che vuoi solo testare la tua applicazione.


1
Bella risposta. Se stai testando un'app rails utilizzando Webrick, imposta l'indirizzo IP della tua macchina di sviluppo e la porta 3000
lsaffie

4
Se stai usando Wamp o uWamp su Windows, imposta la porta su 80.
Epoc

10
E i casi come il mio in cui la tua app locale estrae dati da varie API in rete?
Jared Eitnier

28

Imposta il file hosts su un computer che esegue un server proxy come Fiddler o Charles e configura l'iPad per utilizzare quel computer come proxy HTTP.

Ecco le istruzioni su come farlo con Fiddler: http://conceptdev.blogspot.com/2009/01/monitoring-iphone-web-traffic-with.html

E questo è per Charles: http://www.ravelrumba.com/blog/ipad-http-debugging/


Grazie per aver arricchito le opzioni Windows / Mac.
tremoloqui

2
Per noi sviluppatori Windows, Fiddler è un'ottima opzione, poiché la maggior parte degli sviluppatori lo ha già installato.
Josh Mouch

11

Se hai già un server Apache su cui stai eseguendo lo sviluppo, puoi usarlo facilmente come proxy di inoltro. Ciò è particolarmente utile per i siti WordPress, che amano davvero utilizzare l'URL assoluto completo.

Esempio di Ubuntu di seguito:

Il primo passo è modificare il /etc/hostsfile nel tuo server di sviluppo. Aggiungi l'IP locale del server, che punta al tuo sito.

127.0.0.1 dev.mysite.com

Questo file host verrà utilizzato dal proxy Apache quando tenta di risolvere le richieste dal tuo iPhone / iPad. Quindi configuriamo la parte Apache ora ...

Potrebbe essere necessario installare prima alcuni moduli.

sudo apt-get install libapache2-mod-proxy-html
sudo a2enmod proxy proxy_http proxy_html
sudo apache2ctl graceful

Quindi crea un file host virtuale, ad esempio /etc/apache2/sites-available/my-proxy

Listen *:8080
<VirtualHost *:8080>
    ProxyRequests On

    <Proxy *>
        Order Deny,Allow
        Deny from all
        Allow from 192.168.1.0/24 
    </Proxy>
</VirtualHost>

Abilita vhost e riavvia Apache:

sudo a2ensite my-proxy
sudo apache2ctl graceful

Quindi vai su Impostazioni> Wi-Fi> La tua rete e configura un proxy "Manuale". Inserisci l'IP del tuo server Apache e la porta. Questo è tutto!

Il <Proxy *>blocco garantisce che solo le persone sulla mia rete locale possano utilizzare questo proxy. Limitare rigorosamente l'accesso è essenziale se si utilizza un proxy di inoltro. La pagina ip2cidr sarà utile a questo punto. (Come misura aggiuntiva, la porta: 8080 è bloccata dal mio firewall.)


9

Devo testare le app Web che sto sviluppando su un iPad. Uso Apache sulla mia macchina di sviluppo per eseguire le app Web, quindi la soluzione più semplice che ho trovato è stata quella di utilizzare Apache mod_proxy.

La mia macchina di sviluppo è visibile sulla mia rete domestica come sapphire.local.

L'app Web che sto testando è ospitata sulla macchina di sviluppo in demo.cms.dev (sto usando POW).

Per configurare il proxy, ho aggiunto la seguente sezione a httpd.conf.

<VirtualHost *:80>
  ServerName sapphire.local
  ProxyPass / http://demo.cms.dev/
  ProxyPassReverse / http://demo.cms.dev/
  ProxyPassReverseCookieDomain .cms.dev .sapphire.local
  ProxyPreserveHost Off
</VirtualHost>

Questo instrada le richieste in arrivo su sapphire.local a demo.cms.dev. Il metodo funziona solo per un'app alla volta. Penso che potresti utilizzare porte diverse per configurare app aggiuntive. Forse qualcuno ha una soluzione migliore?


Questo mi ha indirizzato nella giusta direzione. Inizialmente, ho ricevuto un messaggio di errore "Nessun gestore di protocollo era valido per l'URL". Ho scoperto che dovevo caricare sia proxy_module che proxy_http_module per farlo funzionare. Grazie!
Hobo

8

È anche possibile utilizzare l'app Weblock - AdBlock per iOS (disponibile per $ 1,99 qui: https://itunes.apple.com/us/app/weblock/id558818638?mt=8 ) per creare reindirizzamenti del traffico web.

Ciò consente di reindirizzare qualsiasi traffico corrispondente a determinate regole all'indirizzo IP specificato. Questo emulerà l'aggiunta di una voce a / etc / hosts sul tuo dispositivo iOS. Se il nome host impostato nelle richieste è gestito dall'IP a cui indirizzi il tuo traffico, puoi utilizzarlo per testare l'API privata o persino rilevare il traffico inviato da altre app o siti web. Questo purtroppo funziona solo per le connessioni http / https.

Tutto questo può essere fatto solo su Wi-Fi (uno dei limiti di Weblock). Il vantaggio principale è che puoi facilmente configurare tutto dal tuo dispositivo iOS e non è necessario fare confusione con la configurazione del server DNS / proxy.

Ecco un esempio:

  1. Ho configurato Weblock in questo modo: http://i.stack.imgur.com/c5SUh.png
  2. Safari aperto e digitato www.google.com come URL
  3. Questo è l'output nel terminale sul mio Mac che ascolta la connessione sulla porta 1234:
    macbook-pro-tk: ~ kpr $ nc -l -v -v 1234
    OTTIENI http://www.google.com/ HTTP / 1.1
    Host: www.google.com
    Accetta: testo / html, application / xhtml + xml, application / xml; q = 0.9, * / *; q = 0.8
    Proxy-Connection: keep-alive
    PREF = ID = 7722bc3c844a7c26: TM = 1.402.073,839 mila: LM = 1.402.073,839 mila: S = 5bSJJsM2p0HgUP7L
    Agente utente: Mozilla / 5.0 (iPhone; CPU iPhone OS 7_1_1 come Mac OS X) AppleWebKit / 537.51.2 (KHTML, come Gecko) Versione / 7.0 Mobile / 11D201 Safari / 9537.53
    Accept-Language: en-us
    Accetta codifica: gzip, deflate
    Connessione: keep-alive

Weblock è utile anche per reindirizzare selettivamente alcuni URL con espressioni regolari. È possibile reindirizzare le query solo a determinati endpoint, mentre tutte le altre query vanno all'IP restituito dal DNS. Ciò consente effettivamente una configurazione ancora più adatta rispetto a / etc / hosts.

Esempio: se creo una regola di reindirizzamento URL per http://somedomain.com/api/login* e alcuni IP e porte, vedrò solo il traffico da questo URL a questo IP e porta, mentre tutto il resto del traffico a somedomain. com andrà direttamente all'IP restituito dal DNS. Notare che funzionerà sia per / api / login che per / api / login? Someparam = somevalue grazie al carattere jolly * alla fine della regola.


Grazie. L'ho appena acquistato e lo proverò.
Dennis Day,

6

L'ho fatto usando squidman su Mac. È facile da configurare e utilizzare.
L'ho impostato in 5 minuti seguendo questo articolo .

Aggiornare

Un'altra cosa è che se vuoi connetterti ai siti web in esecuzione sul server proxy, nel mio caso è il mio Mac, devi commentare questa riga in squidman-> Preferenze-> Modello

# protect web apps running on the proxy host from external users
# http_access deny to_localhost

5

È possibile configurare un server DNS interno sulla rete (se non ne esiste già uno) e impostare un record A. Quindi assicurati che il tuo DHCP sia impostato per restituire detto server DNS


3

Puoi anche usare http://xip.io/ usando le istruzioni in quella pagina puoi inserire l'indirizzo ip e ti reindirizzerà all'ip locale pertinente.


2

Se hai un sito web live puoi usare per questo:

Puoi aggiungere un record A alla tua configurazione DNS: qualcosa.tuodominio.com che punta al tuo indirizzo IP locale, quindi aggiungere una voce per qualcosa.tuodominio.com al file degli host virtuali. Riavvia Apache, porta il tuo dispositivo iOS sulla stessa rete e sei a posto.


1

Di seguito è riportato un metodo senza configurazione per il test cross-device / computer di un host Mamp Pro Virtual. L'unica limitazione è che puoi testare solo un dominio alla volta, ma per me va bene quando sto sviluppando. Tuttavia è davvero semplice cambiare host virtuali direttamente in mamp.

Sto correndo con Mamp Pro 2, leone di montagna. La cartella I miei siti contiene le singole cartelle di dominio.

Ho scoperto che se scegli l'ip specifico del computer locale sotto l'host virtuale "ip / port" e riavvia il mamp, questo dominio diventerà il dominio predefinito durante la visualizzazione dell'indirizzo IP del computer localhost, o del nome del computer, attraverso la rete.

A scopo di test, funziona alla grande su tutti i dispositivi della rete, compreso l'iPad. Se vuoi testare un altro host virtuale puoi semplicemente restituire la configurazione ip / porta a "*" e quindi riassegnare un altro dominio all'indirizzo ip del computer e riavviare.

Il vantaggio di questo semplice approccio è che puoi fornire l'accesso ai client direttamente ai tuoi siti di sviluppo quando sei sulla stessa rete senza dover eseguire alcuna configurazione sulla loro macchina.

Spero che questo aiuti chiunque altro alla ricerca di una soluzione semplice.


1

Il server DNS interno è una delle opzioni, ma era troppo complicato da implementare. Abbiamo provato a installare squid come server proxy, ma anche questo non ha funzionato perché reindirizzava l'URL al nuovo server e questo reindirizzamento è stato visto anche sull'URL del browser.

La cosa che alla fine ha funzionato per noi è stata installare Fiddler su uno dei server e utilizzare questo server come server proxy su ipad. Fiddler ha anche una funzione per mappare i sottodomini all'indirizzo IP, cioè qualcosa di simile a / etc / hosts.


1

Bel tutorial per farlo: http://egalo.com/2012/05/29/testing-mac-web-site-using-local-hostname-on-mobile-device/

Un altro modo è connettere l'iPad tramite Hotspot locale con il mio MAC OS X e stabilire un port forwarding alla VM di sviluppo. Per ottenere ciò ho eseguito i seguenti passaggi:

  • su MAC OS X creare un collegamento WLAN-Hotspot come fare
  • collega l'iPAD con l'Hotspot-WLAN (su iPAD >> Impostazioni >> WLAN)
  • Aggiungi ServerAlias ​​alla VM di sviluppo locale (dettagli di seguito)
  • stabilire ssh-portforwarding
    ssh -NL <IP-of-hotspot-host>:<source-port>:<url-to-local-vm>:80 <user-to-vm>
  • Nel browser iPAD aprire la pagina con l'IP
    <IP-of-hotspot-host>:<source-port>

Dove ottenere "IP-of-hotspot-host":

Dopo aver creato l'hotspot c'è un punto WLAN nelle
impostazioni di sistema di MAC OS X >> Rete >> WLAN

Aggiunta di ServerAlias:

Nella mia VM di sviluppo (Apache2) in /etc/apache2/sites-available/dkr.dev.local ho dovuto aggiungere quanto segue:

<VirtualHost *: 80>  
    ...  
    ServerAlias ​​<IP-of-hotspot-host>  
    ...  
</ VirtualHost>

1

Se hai esplorato questo e alcuni dei link esterni, probabilmente troverai questa risposta:

https://stackoverflow.com/a/24770097/3842985

Si tratta di un server DNS leggero chiamato dnsmasq. Super semplice, molto potente e può essere utilizzato insieme ai tuoi server DNS interni o esterni.

Molto più facile che installare squid, armeggiare con Apache e altre tecniche che richiederebbero molto tempo e rischierebbero l '"integrità" delle configurazioni, sviluppare ambienti, ambienti di test, ecc.

Vale la pena considerare.

L'ho adottato come strumento regolare per lo sviluppo e per il normale networking.


1

L'utilizzo di un server DNS personalizzato su PC può risolvere questo problema. Sto usando e lavorando perfettamente.

Controlla https://technitium.com/dns/ per scaricare il server DNS personalizzato. Che è costruito utilizzando la tecnologia .Net. Dopo aver configurato questo strumento, è necessario modificare le impostazioni DNS su personalizzato e impostare l'IP del PC. Per evitare di cambiare IP ogni volta che riavvii il PC, usa l'IP statico sul PC.


0

Proverei Relay Server (parte di Afaria) che può reindirizzare il traffico mobile in base ai profili.

Aggiornamento: la risposta di tremoloqui sembra meno problematica e molto più economica.


0

Le risposte qui sono corrette. Un po 'più di conoscenza: questi non funzioneranno con il blocco dei certificati. Quello che puoi fare è (1) utilizzare un certificato jolly di dominio per supportare il test della regione dev / test / qa. E / o (2) utilizzare un server proxy inverso come Apache in base al quale si passa alla posizione in cui Apache instrada le richieste all'interno della rete. Ora, quando accedi al test SSL Pinning, sei morto nell'acqua con i dispositivi fisici e puoi convalidare solo con il simulatore (ios) e l'emulatore (Android).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.