Bagaimana cara mengalihkan permintaan HTTP yang dibuat dari iPad?


116

Karena di iPad kami tidak dapat mengedit file host (tanpa jailbreaking), bagaimana kami dapat mengalihkan lalu lintas web secara sewenang-wenang ke url lain?

Ini akan menjadi penting untuk sesuatu seperti mengembangkan situs web yang menggunakan konfigurasi Host Virtual di mana Anda ingin mengarahkan ke mesin pengembangan.

(Ini terkait dengan pertanyaan ini: Dapatkah saya mengedit file host iPad? )

Jawaban:


88

Cara untuk mengatasi keterbatasan iPad ini adalah dengan menggunakan server proxy HTTP, seperti Squid yang berjalan di komputer lain di mana Anda dapat mengedit file host.

Di iPad Di Bawah Pengaturan -> Jaringan -> Wi-Fi -> (Jaringan Anda) Ada pengaturan Proxy HTTP yang dapat diatur ke manual. Masukkan informasi proxy Anda di sini.

Setelah ini diatur, Anda akan dapat memanipulasi iPad seolah-olah Anda sedang mengubah file host.


3
Sekadar catatan, saya akan mengatakan bahwa cukup mudah untuk menginstal squid menggunakan macports "sudo port install squid"
MiQUEL

1
atau yum install squiddi fedora
Abhishek

3
atau apt-get install squiddi Ubuntu
Jess Telford

3
Catatan: setiap kali Anda mengedit file host di server Squid Anda, restart layanan Squid untuk memastikan hasil edit. Di Ubuntu itu sudo service squid3 reload. Juga - dan mungkin ini adalah masalah konfigurasi khusus untuk server dev saya - di iPad saya, saya harus memasukkan http: // secara manual agar resolusi alamat berfungsi dengan benar.
Andy Giesler

1
Cara lain yang lebih mudah untuk melakukannya adalah dengan alat yang saya tulis: testProxy. Tidak perlu konfigurasi: github.com/edwinm/testProxy
edwin

71

Saya menemukan Anda hanya perlu mengubah pengaturan Wifi di iPad Anda untuk menggunakan alamat IP mesin pengembangan Anda sebagai proxy HTTP (seperti yang dijelaskan dalam artikel yang disebutkan di atas ):

masukkan deskripsi gambar di sini

Dengan begitu, cukup untuk dapat mengakses aplikasi web Anda di iPad Anda dengan memasukkan url host virtual (misalnya local.mywebapp.com). Ini mudah dan cepat, tetapi tidak seperti solusi Will Koehler, Anda tidak akan dapat mengakses Internet dari iPad. Tetapi sebagian besar waktu itu sebenarnya bukan masalah, karena Anda hanya ingin menguji aplikasi Anda sendiri.


1
Jawaban yang bagus. Jika Anda menguji aplikasi rel menggunakan Webrick, cukup setel alamat ip mesin dev dan port 3000
lsaffie

4
Jika Anda menggunakan Wamp atau uWamp di Windows, setel port ke 80.
Epoc

10
Bagaimana dengan kasus seperti saya di mana aplikasi lokal Anda menarik data dari berbagai API di internet?
Jared Eitnier

28

Atur file host di komputer yang menjalankan server proxy seperti Fiddler atau Charles, dan konfigurasikan iPad untuk menggunakan komputer tersebut sebagai proxy HTTP.

Berikut adalah petunjuk cara melakukan ini dengan Fiddler: http://conceptdev.blogspot.com/2009/01/monitoring-iphone-web-traffic-with.html

Dan ini untuk Charles: http://www.ravelrumba.com/blog/ipad-http-debugging/


Terima kasih telah menyempurnakan opsi Windows / Mac.
tremoloqui

2
Bagi kami pengembang Windows, Fiddler adalah opsi yang bagus, karena sebagian besar pengembang sudah menginstalnya.
Josh Mouch

11

Jika Anda sudah memiliki server Apache tempat Anda melakukan dev, Anda dapat dengan mudah menggunakannya sebagai proxy penerusan. Ini sangat berguna untuk situs WordPress, yang sangat suka menggunakan URL absolut lengkap.

Contoh Ubuntu di bawah ini:

Langkah pertama adalah mengedit /etc/hostsfile di server dev Anda. Tambahkan IP lokal server, yang mengarah ke situs Anda.

127.0.0.1 dev.mysite.com

File host ini akan digunakan oleh proxy Apache Anda ketika mencoba menyelesaikan permintaan dari iPhone / iPad Anda. Jadi mari kita atur bagian Apache sekarang ...

Anda mungkin perlu menginstal beberapa modul terlebih dahulu.

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

Kemudian buat file virtual host, misalnya /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>

Aktifkan vhost, dan mulai ulang Apache:

sudo a2ensite my-proxy
sudo apache2ctl graceful

Lalu pergi ke Pengaturan> Wi-Fi> Jaringan Anda dan konfigurasikan proxy "Manual". Masukkan IP server Apache Anda, dan porta. Itu dia!

The <Proxy *>blok memastikan bahwa hanya orang-orang di jaringan lokal saya dapat menggunakan proxy ini. Membatasi akses secara ketat penting jika Anda menggunakan proxy penerusan. The ip2cidr halaman akan membantu pada saat ini. (Sebagai tindakan ekstra, port: 8080 diblokir oleh firewall saya.)


9

Saya perlu menguji aplikasi web yang saya kembangkan di iPad. Saya menggunakan Apache di mesin dev saya untuk menjalankan aplikasi web, jadi solusi termudah yang saya temukan adalah menggunakan Apache mod_proxy.

Mesin dev saya terlihat di jaringan rumah saya sebagai sapphire.local.

Aplikasi web yang saya uji di-host pada mesin dev di demo.cms.dev (Saya menggunakan POW).

Untuk mengatur proxy, saya menambahkan bagian berikut ke 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>

Ini merutekan permintaan masuk di sapphire.local ke demo.cms.dev. Metode ini hanya berfungsi untuk satu aplikasi dalam satu waktu. Saya pikir Anda dapat menggunakan port yang berbeda untuk mengatur aplikasi tambahan. Mungkin seseorang punya solusi yang lebih baik?


Ini mengarahkan saya ke arah yang benar. Awalnya, saya mendapat pesan kesalahan "Tidak ada penangan protokol yang valid untuk URL". Saya menemukan saya harus memuat kedua proxy_module dan proxy_http_module agar berfungsi. Terima kasih!
Hobo

8

Anda juga dapat menggunakan aplikasi Weblock - AdBlock untuk iOS (tersedia dengan harga $ 1,99 di sini: https://itunes.apple.com/us/app/weblock/id558818638?mt=8 ) untuk membuat pengalihan lalu lintas web.

Ini memungkinkan Anda untuk mengarahkan lalu lintas yang cocok dengan aturan tertentu ke alamat IP yang ditentukan. Ini akan meniru menambahkan entri ke / etc / hosts di perangkat iOS Anda. Jika nama host yang disetel dalam permintaan ditangani oleh IP yang Anda arahkan lalu lintasnya, Anda dapat menggunakan ini untuk menguji API pribadi atau bahkan mengendus lalu lintas yang dikirim dari aplikasi atau situs web lain. Sayangnya ini hanya berfungsi untuk koneksi http / https.

Semua ini dapat dilakukan hanya saat menggunakan Wi-Fi (salah satu batasan Weblock). Ada keuntungan utama adalah Anda dapat dengan mudah mengkonfigurasi semuanya dari perangkat iOS Anda dan tidak perlu mengacaukan konfigurasi server DNS / proxy.

Berikut contohnya:

  1. Saya telah mengkonfigurasi Weblock seperti ini: http://i.stack.imgur.com/c5SUh.png
  2. Membuka Safari dan mengetik di www.google.com sebagai URL
  3. Ini adalah output di terminal di Mac saya mendengarkan koneksi pada port 1234:
    macbook-pro-tk: ~ kpr $ nc -l -v -v 1234
    DAPATKAN http://www.google.com/ HTTP / 1.1
    Host: www.google.com
    Terima: teks / html, aplikasi / xhtml + xml, aplikasi / xml; q = 0.9, * / *; q = 0.8
    Proxy-Connection: tetap hidup
    PREF = ID = 7722bc3c844a7c26: TM = 1402073839: LM = 1402073839: S = 5bSJJsM2p0HgUP7L
    Agen-Pengguna: Mozilla / 5.0 (iPhone; CPU iPhone OS 7_1_1 seperti Mac OS X) AppleWebKit / 537.51.2 (KHTML, seperti Gecko) Versi / 7.0 Mobile / 11D201 Safari / 9537.53
    Terima-Bahasa: en-us
    Terima-Enkode: gzip, deflate
    Koneksi: tetap hidup

Kunci web juga bagus untuk mengalihkan secara selektif beberapa URL dengan ekspresi reguler. Anda dapat mengarahkan kueri ke titik akhir tertentu saja, sementara semua kueri lainnya masuk ke IP yang dikembalikan dari DNS. Ini sebenarnya memungkinkan konfigurasi yang lebih pas daripada / etc / hosts.

Contoh: Jika saya membuat aturan pengalihan URL untuk htt *: //somedomain.com/api/login* dan beberapa IP dan port, saya hanya akan melihat lalu lintas dari URL ini di IP dan port ini, sementara semua lalu lintas lainnya ke domain tertentu. com akan langsung menuju ke IP yang dikembalikan oleh DNS. Perhatikan bahwa ini akan berfungsi untuk / api / login dan / api / login? Someparam = somevalue berkat tanda wildcard * di akhir aturan.


Terima kasih. Saya baru saja membeli ini dan akan mencobanya.
Dennis Day

6

Saya membuatnya dengan menggunakan squidman di Mac. Mudah disiapkan dan digunakan.
Saya mengaturnya dalam 5 menit dengan mengikuti artikel ini .

Memperbarui

Hal lain adalah jika Anda ingin terhubung ke situs web yang berjalan di server proxy, dalam kasus saya ini Mac saya, Anda perlu mengomentari baris ini di squidman-> Preferences-> Template

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

5

Anda dapat menyiapkan server DNS internal di jaringan Anda (jika belum ada) dan menyiapkan data A. Kemudian pastikan DHCP Anda diatur untuk mengembalikan server DNS tersebut


3

Anda juga dapat menggunakan http://xip.io/ menggunakan petunjuk di halaman itu Anda dapat memasukkan alamat ip dan itu akan mengarahkan Anda ke ip lokal yang relevan.


2

Jika Anda memiliki situs web langsung, Anda dapat menggunakan untuk ini:

Anda dapat menambahkan rekam A ke konfigurasi DNS Anda: sesuatu.domainanda.com yang mengarah ke alamat IP lokal Anda, lalu tambahkan entri untuk sesuatu.domainanda.com ke file host virtual Anda. Mulai ulang Apache, dapatkan perangkat iOS Anda di jaringan yang sama dan Anda siap melakukannya.


1

Berikut adalah metode tanpa konfigurasi untuk pengujian lintas perangkat / komputer dari host Virtual Mamp Pro. Satu-satunya batasan adalah Anda hanya dapat menguji satu domain dalam satu waktu, tetapi bagi saya ini baik-baik saja saat saya mengembangkan. Namun sangat sederhana untuk mengubah antara host virtual langsung di rawa.

Aku menjalankan mamp pro 2, singa gunung. Folder situs saya berisi folder domain individual.

Saya menemukan jika Anda memilih ip tertentu dari komputer lokal di bawah host virtual 'ip / port' dan restart mamp domain ini akan menjadi domain default saat melihat alamat ip komputer localhost, atau nama komputer, di seluruh jaringan.

Untuk tujuan pengujian, ini berfungsi dengan baik di semua perangkat di jaringan, termasuk iPad. Jika Anda ingin menguji virtual host lain Anda cukup mengembalikan ip / port config ke "*" dan kemudian menetapkan kembali domain lain ke alamat ip komputer dan restart.

Keuntungan dari pendekatan sederhana ini adalah Anda dapat memberikan akses ke klien secara langsung ke situs pengembangan Anda saat Anda berada di jaringan yang sama tanpa harus melalui konfigurasi apa pun di komputer mereka.

Semoga ini bisa membantu orang lain yang mencari solusi sederhana.


1

Server DNS internal adalah salah satu opsi tetapi itu terlalu rumit untuk diterapkan. Kami mencoba menginstal squid sebagai server proxy tetapi itu juga tidak berhasil karena mengarahkan URL ke server baru dan pengalihan ini terlihat di URL browser juga.

Hal yang akhirnya berhasil bagi kami adalah menginstal Fiddler di salah satu server dan menggunakan server ini sebagai server proxy di ipad. Fiddler juga memiliki fitur untuk memetakan sub-domain ke alamat IP, yaitu sesuatu yang mirip dengan / etc / hosts.


1

Tutorial bagus untuk melakukannya: http://egalo.com/2012/05/29/testing-mac-web-site-using-local-hostname-on-mobile-device/

Cara lain adalah menghubungkan iPad melalui Hotspot Lokal dengan MAC OS X saya dan membuat port-forwarding ke VM pengembangan. Untuk mencapai ini saya telah melakukan langkah-langkah berikut:

  • di MAC OS X buat Link WLAN-Hotspot bagaimana melakukan ini
  • hubungkan iPAD dengan Hotspot-WLAN (di iPAD >> Pengaturan >> WLAN)
  • Tambahkan ServerAlias ​​ke VM pengembangan lokal (detail di bawah)
  • membangun ssh-portforwarding
    ssh -NL <IP-of-hotspot-host>:<source-port>:<url-to-local-vm>:80 <user-to-vm>
  • Pada iPADs Browser, buka halaman dengan IP
    <IP-of-hotspot-host>:<source-port>

Di mana mendapatkan 'IP-of-hotspot-host':

Setelah hotspot dibuat, ada WLAN-Point di
pengaturan sistem MAC OS X >> Jaringan >> WLAN

Menambahkan ServerAlias:

Pada VM pengembangan saya (Apache2) di /etc/apache2/sites-available/dkr.dev.local, saya harus menambahkan yang berikut ini:

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

1

Jika Anda telah menjelajahi ini, dan beberapa tautan eksternal, Anda mungkin akan menemukan jawaban ini:

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

Ini tentang server DNS ringan yang disebut dnsmasq. Sangat sederhana, sangat kuat, dan dapat digunakan bersama dengan server DNS internal atau eksternal Anda.

Jauh lebih mudah daripada menginstal squid, mengutak-atik Apache, dan teknik lain yang akan memakan waktu, dan mempertaruhkan "integritas" konfigurasi, mengembangkan lingkungan, menguji lingkungan, dll.

Layak dipertimbangkan.

Saya mengadopsinya sebagai alat biasa untuk pengembangan dan untuk jaringan normal.


1

Menggunakan server DNS khusus di PC dapat mengatasi ini. Saya menggunakan dan bekerja dengan sempurna.

Periksa https://technitium.com/dns/ untuk mengunduh server DNS khusus. Yang dibangun menggunakan teknologi .Net. Setelah mengkonfigurasi alat ini, Anda perlu mengubah pengaturan DNS menjadi kustom dan mengatur IP PC Anda. Untuk menghindari perubahan IP setiap kali Anda me-restart PC, gunakan IP statis pada PC.


0

Saya akan mencoba Relay Server (bagian dari Afaria) yang dapat mengarahkan kembali lalu lintas seluler berdasarkan profil.

Pembaruan: Jawaban tremoloqui tampaknya tidak terlalu merepotkan dan jauh lebih murah.


0

Jawaban di sini benar. Sedikit lebih banyak pengetahuan: Ini tidak akan berfungsi dengan penyematan sertifikat. Apa yang dapat Anda lakukan adalah (1) menggunakan sertifikat wildcard domain untuk mendukung pengujian wilayah dev / test / qa Anda. Dan / atau (2) gunakan server proxy terbalik seperti Apache di mana Anda mengubah ke mana Apache merutekan permintaan dalam jaringan Anda. Sekarang, ketika Anda masuk ke pengujian SSL Pinning maka Anda mati di air dengan perangkat fisik dan hanya dapat memvalidasi dengan simulator (ios) dan emulator (android).

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.