ฉันจะเปลี่ยนเส้นทางคำขอ HTTP ที่สร้างจาก iPad ได้อย่างไร


117

เนื่องจากบน iPad เราไม่สามารถแก้ไขไฟล์โฮสต์ได้ (โดยไม่ต้องเจลเบรค) เราจะเปลี่ยนเส้นทางการรับส่งข้อมูลเว็บไปยัง URL อื่นโดยพลการได้อย่างไร

สิ่งนี้มีความสำคัญสำหรับบางสิ่งเช่นการพัฒนาเว็บไซต์ที่ใช้การกำหนดค่าโฮสต์เสมือนที่คุณต้องการเปลี่ยนเส้นทางไปยังเครื่องพัฒนา

(ซึ่งเกี่ยวข้องกับคำถามนี้: ฉันสามารถแก้ไขไฟล์โฮสต์ของ iPad ได้หรือไม่ )

คำตอบ:


88

วิธีหลีกเลี่ยงข้อ จำกัด ของ iPad นี้คือการใช้พร็อกซีเซิร์ฟเวอร์ HTTP เช่นSquidทำงานบนเครื่องอื่นซึ่งคุณสามารถแก้ไขไฟล์โฮสต์ได้

บน iPad ภายใต้การตั้งค่า -> เครือข่าย -> Wi-Fi -> (เครือข่ายของคุณ) มีการตั้งค่า HTTP Proxy ซึ่งสามารถตั้งค่าเป็นแบบแมนนวลได้ ป้อนข้อมูลพร็อกซีของคุณที่นี่

เมื่อตั้งค่าแล้วคุณจะสามารถจัดการกับ iPad ได้ราวกับว่าคุณกำลังเปลี่ยนไฟล์โฮสต์


3
สำหรับบันทึกฉันบอกว่ามันค่อนข้างง่ายในการติดตั้งปลาหมึกโดยใช้ macports "sudo port install ปลาหมึก"
MiQUEL

1
หรือyum install squidบน fedora
Abhishek

3
หรือapt-get install squidบน Ubuntu
Jess Telford

3
หมายเหตุ: ทุกครั้งที่คุณแก้ไขไฟล์โฮสต์บนเซิร์ฟเวอร์ Squid ของคุณให้รีสตาร์ทบริการ Squid เพื่อให้แน่ใจว่าการแก้ไขจะมีผล บน Ubuntu นั่นคือsudo service squid3 reload. นอกจากนี้ - และอาจเป็นปัญหาการกำหนดค่าเฉพาะสำหรับเซิร์ฟเวอร์ dev ของฉันบน iPad ของฉันฉันต้องป้อน http: // ด้วยตนเองเพื่อให้การแก้ไขที่อยู่ทำงานได้อย่างถูกต้อง
Andy Giesler

1
อีกวิธีที่ง่ายกว่าในการทำเช่นนี้คือใช้เครื่องมือที่ฉันเขียน: testProxy ไม่จำเป็นต้องกำหนดค่า: github.com/edwinm/testProxy
edwin

71

ผมพบว่าคุณก็มีการปรับเปลี่ยนการตั้งค่า Wifiใน iPad ของคุณที่จะใช้ที่อยู่ IP ของเครื่องพัฒนาของคุณเป็นพร็อกซี HTTP (ตามที่อธิบายไว้ในบทความดังกล่าวข้างต้น ):

ใส่คำอธิบายภาพที่นี่

ด้วยวิธีนี้ก็เพียงพอแล้วที่จะสามารถเข้าถึงเว็บแอปพลิเคชันของคุณบน iPad ของคุณได้โดยป้อน url ของโฮสต์เสมือน (เช่นlocal.mywebapp.com) เป็นเรื่องง่ายและรวดเร็ว แต่แตกต่างจากโซลูชันของ Will Koehler อย่างไรก็ตามคุณจะไม่สามารถเข้าถึงอินเทอร์เน็ตจาก iPad ได้ แต่ส่วนใหญ่แล้วมันไม่ใช่ปัญหาเพราะคุณแค่ต้องการทดสอบแอปพลิเคชันของคุณเอง


1
คำตอบที่ดี หากคุณกำลังทดสอบแอปรางโดยใช้ Webrick เพียงแค่ตั้งค่าที่อยู่ IP ของเครื่อง dev และพอร์ต 3000
lsaffie

4
หากคุณกำลังใช้ Wamp หรือ uWamp บน Windows, 80ตั้งพอร์ตเพื่อ
Epoc

10
แล้วกรณีเช่นของฉันที่แอปในพื้นที่ของคุณดึงข้อมูลจาก API ต่างๆบนเน็ต?
Jared Eitnier

28

ตั้งค่าไฟล์โฮสต์บนคอมพิวเตอร์ที่ใช้พร็อกซีเซิร์ฟเวอร์เช่น Fiddler หรือ Charles และกำหนดค่า iPad ให้ใช้คอมพิวเตอร์เครื่องนั้นเป็นพร็อกซี HTTP

คำแนะนำในการดำเนินการกับ Fiddler มีดังนี้: http://conceptdev.blogspot.com/2009/01/monitoring-iphone-web-traffic-with.html

และนี่คือสำหรับ Charles: http://www.ravelrumba.com/blog/ipad-http-debugging/


ขอบคุณสำหรับการใช้งานตัวเลือก Windows / Mac
tremoloqui

2
สำหรับนักพัฒนา Windows พวกเรา Fiddler เป็นตัวเลือกที่ยอดเยี่ยมเนื่องจากนักพัฒนาส่วนใหญ่ได้ติดตั้งไว้แล้ว
Josh Mouch

11

หากคุณมีเซิร์ฟเวอร์Apacheที่คุณกำลังทำ dev อยู่คุณสามารถใช้เป็นพร็อกซีส่งต่อได้อย่างง่ายดาย สิ่งนี้มีประโยชน์อย่างยิ่งสำหรับไซต์ WordPress ซึ่งชอบใช้ URL แบบสมบูรณ์จริงๆ

ตัวอย่างUbuntuด้านล่าง:

ขั้นตอนแรกคือการแก้ไข/etc/hostsไฟล์ในเซิร์ฟเวอร์ dev ของคุณ เพิ่ม IP ท้องถิ่นของเซิร์ฟเวอร์ชี้ไปที่ไซต์ของคุณ

127.0.0.1 dev.mysite.com

Apache proxy ของคุณจะใช้ไฟล์โฮสต์นี้เมื่อพยายามแก้ไขคำขอจาก iPhone / iPad ของคุณ มาตั้งค่าส่วน Apache กันเลย ...

คุณอาจต้องติดตั้งโมดูลบางส่วนก่อน

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

จากนั้นสร้างไฟล์โฮสต์เสมือนตัวอย่างเช่น /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>

เปิดใช้งาน vhost และรีสตาร์ท Apache:

sudo a2ensite my-proxy
sudo apache2ctl graceful

จากนั้นไปที่การตั้งค่า> Wi-Fi> เครือข่ายของคุณและกำหนดค่าพร็อกซี "ด้วยตนเอง" ป้อน IP ของเซิร์ฟเวอร์ Apache ของคุณและพอร์ต แค่นั้นแหละ!

<Proxy *>บล็อกเพื่อให้แน่ใจว่าคนเท่านั้นที่อยู่บนเครือข่ายท้องถิ่นของฉันสามารถใช้พร็อกซี่นี้ การ จำกัด การเข้าถึงอย่างเคร่งครัดเป็นสิ่งสำคัญหากคุณใช้ฟอร์เวิร์ดพร็อกซี ip2cidrหน้าจะเป็นประโยชน์ที่จุดนี้ (เป็นมาตรการเพิ่มเติมพอร์ต 8080 ถูกบล็อกโดยไฟร์วอลล์ของฉัน)


9

ฉันต้องการทดสอบเว็บแอปที่ฉันกำลังพัฒนาบน iPad ฉันใช้ Apache บนเครื่อง dev เพื่อเรียกใช้เว็บแอปดังนั้นวิธีที่ง่ายที่สุดที่ฉันพบคือใช้ Apache mod_proxy

เครื่อง dev ของฉันมองเห็นได้บนเครือข่ายในบ้านของฉันเป็น sapphire.local

เว็บแอปที่ฉันกำลังทดสอบนั้นโฮสต์บนเครื่อง dev ที่ demo.cms.dev (ฉันใช้ POW)

ในการตั้งค่าพร็อกซีฉันได้เพิ่มส่วนต่อไปนี้ใน 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>

เส้นทางนี้ส่งคำขอที่เข้ามาบน sapphire.local ไปยัง demo.cms.dev วิธีนี้ใช้ได้ครั้งละหนึ่งแอปเท่านั้น ฉันคิดว่าคุณสามารถใช้พอร์ตอื่นเพื่อตั้งค่าแอพเพิ่มเติมได้ อาจจะมีใครมีทางออกที่ดีกว่านี้?


สิ่งนี้ชี้ให้ฉันไปในทิศทางที่ถูกต้อง เริ่มแรกฉันได้รับข้อความแสดงข้อผิดพลาด "ไม่มีตัวจัดการโปรโตคอลที่ถูกต้องสำหรับ URL" ฉันพบว่าฉันต้องโหลดทั้ง proxy_module และ proxy_http_module เพื่อให้ใช้งานได้ ขอบคุณ!
กุ๊ย

8

นอกจากนี้ยังสามารถใช้ Weblock - AdBlock สำหรับแอป iOS (มีให้ในราคา $ 1.99 ที่นี่: https://itunes.apple.com/us/app/weblock/id558818638?mt=8 ) เพื่อสร้างการเปลี่ยนเส้นทางการเข้าชมเว็บ

วิธีนี้ช่วยให้คุณสามารถเปลี่ยนเส้นทางการรับส่งข้อมูลที่ตรงกับกฎบางข้อไปยังที่อยู่ IP ที่ระบุ สิ่งนี้จะจำลองการเพิ่มรายการไปยัง / etc / hosts บนอุปกรณ์ iOS ของคุณ หากชื่อโฮสต์ที่ตั้งไว้ในคำขอได้รับการจัดการโดย IP ที่คุณกำหนดเส้นทางการรับส่งข้อมูลคุณสามารถใช้สิ่งนี้เพื่อทดสอบ API ส่วนตัวหรือแม้แต่การดักจับปริมาณการใช้งานที่ส่งจากแอปหรือเว็บไซต์อื่น ๆ น่าเสียดายที่สิ่งนี้ใช้ได้กับการเชื่อมต่อ http / https เท่านั้น

ทั้งหมดนี้สามารถทำได้เฉพาะในขณะที่ใช้ Wi-Fi (หนึ่งในข้อ จำกัด ของ Weblock) มีข้อได้เปรียบหลักคือคุณสามารถกำหนดค่าทุกอย่างจากอุปกรณ์ iOS ของคุณได้อย่างง่ายดายและไม่จำเป็นต้องยุ่งกับการกำหนดค่า DNS / พร็อกซีเซิร์ฟเวอร์

นี่คือตัวอย่าง:

  1. ฉันได้กำหนดค่า Weblock ดังนี้: http://i.stack.imgur.com/c5SUh.png
  2. เปิด Safari และพิมพ์ใน www.google.com เป็น URL
  3. นี่คือเอาต์พุตในเทอร์มินัลบน Mac ของฉันที่กำลังฟังการเชื่อมต่อบนพอร์ต 1234:
    macbook-pro-tk: ~ kpr $ nc -l -v -v 1234
    รับ http://www.google.com/ HTTP / 1.1
    โฮสต์: www.google.com
    ยอมรับ: text / html, application / xhtml + xml, application / xml; q = 0.9, * / *; q = 0.8
    การเชื่อมต่อพร็อกซี: ให้มีชีวิตอยู่
    PREF = ID = 7722bc3c844a7c26: TM = 1402073839: LM = 1402073839: S = 5bSJJsM2p0HgUP7L
    User-Agent: Mozilla / 5.0 (iPhone; CPU iPhone OS 7_1_1 เช่น Mac OS X) AppleWebKit / 537.51.2 (KHTML เช่น Gecko) เวอร์ชัน / 7.0 Mobile / 11D201 Safari / 9537.53
    ยอมรับภาษา: en-us
    ยอมรับการเข้ารหัส: gzip, deflate
    การเชื่อมต่อ: ให้มีชีวิตอยู่

Weblock ยังดีที่จะเลือกเปลี่ยนเส้นทาง URL บางส่วนด้วยนิพจน์ทั่วไป คุณสามารถเปลี่ยนเส้นทางการสืบค้นไปยังปลายทางบางรายการเท่านั้นในขณะที่คำค้นหาอื่น ๆ ทั้งหมดไปที่ IP ที่ส่งคืนจาก DNS สิ่งนี้ช่วยให้สามารถกำหนดค่าที่เหมาะสมยิ่งขึ้นที่ / etc / hosts ทำ

ตัวอย่าง: หากฉันสร้างกฎการเปลี่ยนเส้นทาง URL สำหรับHTT *: //somedomain.com/api/login*และ IP และพอร์ตบางรายการฉันจะเห็นเฉพาะการรับส่งข้อมูลจาก URL นี้ที่ IP และพอร์ตนี้ในขณะที่การรับส่งข้อมูลอื่น ๆ ทั้งหมดไปยัง somedomain com จะไปที่ IP ที่ DNS ส่งคืนโดยตรง สังเกตว่ามันจะใช้ได้กับทั้ง/ api / loginและ/ api / login? someparam = somevalueด้วยเครื่องหมาย wildcard * ที่ท้ายกฎ


ขอบคุณ ฉันเพิ่งซื้อสิ่งนี้และกำลังจะลองใช้
Dennis Day

6

ฉันทำมันโดยใช้Squidmanบน Mac ติดตั้งและใช้งานได้ง่าย
ผมตั้งขึ้นใน 5 นาทีโดยทำตามบทความนี้

ปรับปรุง

อีกอย่างคือถ้าคุณต้องการเชื่อมต่อกับเว็บไซต์ที่ทำงานบนพร็อกซีเซิร์ฟเวอร์ในกรณีของฉันมันเป็น Mac ของฉันคุณต้องแสดงความคิดเห็นในบรรทัดนี้ใน Squidman-> Preferences-> Template

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

5

คุณสามารถตั้งค่าเซิร์ฟเวอร์ DNS ภายในบนเครือข่ายของคุณ (หากยังไม่มี) และตั้งค่าระเบียน A จากนั้นตรวจสอบให้แน่ใจว่า DHCP ของคุณถูกตั้งค่าให้ส่งคืนเซิร์ฟเวอร์ DNS ดังกล่าว


3

คุณยังสามารถใช้http://xip.io/โดยใช้คำแนะนำในหน้านั้นคุณสามารถป้อนที่อยู่ ip และจะเปลี่ยนเส้นทางคุณไปยัง ip ในเครื่องที่เกี่ยวข้อง


2

หากคุณมีเว็บไซต์จริงคุณสามารถใช้สำหรับสิ่งนี้:

คุณสามารถเพิ่มระเบียน A ในการกำหนดค่า DNS ของคุณ: something.yourdomain.com ซึ่งชี้ไปยังที่อยู่ IP ในเครื่องของคุณจากนั้นเพิ่มรายการสำหรับ something.yourdomain.com ลงในไฟล์โฮสต์เสมือนของคุณ รีสตาร์ท Apache รับอุปกรณ์ iOS ของคุณในเครือข่ายเดียวกันและพร้อมใช้งาน


1

นี่คือวิธีการกำหนดค่าสำหรับการทดสอบข้ามอุปกรณ์ / คอมพิวเตอร์ของโฮสต์เสมือน Mamp Pro ข้อ จำกัด เพียงอย่างเดียวคือคุณสามารถทดสอบได้ทีละโดเมนเท่านั้น แต่สำหรับฉันนี่เป็นเรื่องปกติเมื่อฉันกำลังพัฒนา มันง่ายมากอย่างไรก็ตามการเปลี่ยนระหว่างโฮสต์เสมือนโดยตรงใน mamp

อิ่มวิ่ง mamp pro 2 สิงโตภูเขา โฟลเดอร์ไซต์ของฉันมีโฟลเดอร์โดเมนแต่ละโฟลเดอร์

ฉันพบว่าหากคุณเลือก ip เฉพาะของคอมพิวเตอร์ในระบบภายใต้โฮสต์เสมือน 'ip / port' และรีสตาร์ทโดเมนนี้จะกลายเป็นโดเมนเริ่มต้นเมื่อดูที่อยู่ IP ของคอมพิวเตอร์ localhost หรือชื่อคอมพิวเตอร์ผ่านเครือข่าย

เพื่อวัตถุประสงค์ในการทดสอบสิ่งนี้ใช้งานได้ดีในทุกอุปกรณ์ในเครือข่ายรวมถึง iPad หากคุณต้องการทดสอบโฮสต์เสมือนอื่นคุณสามารถคืนค่าการกำหนดค่า ip / พอร์ตเป็น "*" จากนั้นกำหนดโดเมนใหม่ให้กับที่อยู่ IP ของคอมพิวเตอร์และเริ่มการทำงานใหม่

ข้อดีของวิธีง่ายๆนี้คือคุณสามารถให้การเข้าถึงไคลเอนต์โดยตรงไปยังไซต์การพัฒนาของคุณเมื่อคุณอยู่บนเครือข่ายเดียวกันโดยไม่ต้องผ่านการกำหนดค่าใด ๆ บนเครื่องของพวกเขา

หวังว่านี่จะช่วยให้ใครก็ตามที่กำลังมองหาวิธีง่ายๆ


1

เซิร์ฟเวอร์ DNS ภายในเป็นหนึ่งในตัวเลือก แต่ยุ่งยากเกินไปที่จะนำไปใช้ เราพยายามติดตั้ง Squid เป็นพร็อกซีเซิร์ฟเวอร์ แต่ก็ไม่ได้ผลเช่นกันเนื่องจากกำลังเปลี่ยนเส้นทาง URL ไปยังเซิร์ฟเวอร์ใหม่และมีการเปลี่ยนเส้นทางนี้ใน URL ของเบราว์เซอร์ด้วย

สิ่งที่ได้ผลในที่สุดสำหรับเราคือการติดตั้ง Fiddler บนเซิร์ฟเวอร์ใดเซิร์ฟเวอร์หนึ่งและใช้เซิร์ฟเวอร์นี้เป็นพร็อกซีเซิร์ฟเวอร์บน iPad Fiddler ยังมีคุณสมบัติในการแมปโดเมนย่อยกับที่อยู่ IP เช่นสิ่งที่คล้ายกับ / etc / hosts


1

การสอนที่ดีที่จะทำ: http://egalo.com/2012/05/29/testing-mac-web-site-using-local-hostname-on-mobile-device/

อีกวิธีหนึ่งคือการเชื่อมต่อ IPad ผ่าน Local Hotspot กับ MAC OS X ของฉันและสร้างการส่งต่อพอร์ตไปยัง VM สำหรับการพัฒนา เพื่อให้บรรลุสิ่งนี้ฉันได้ทำตามขั้นตอนต่อไปนี้:

  • บน MAC OS X สร้าง WLAN-Hotspot Link วิธีการทำเช่นนี้
  • เชื่อมต่อ iPAD กับ Hotspot-WLAN (บน iPAD >> Settings >> WLAN)
  • เพิ่ม ServerAlias ​​ไปยัง Local development-VM (รายละเอียดด้านล่าง)
  • สร้าง ssh-portforwarding
    ssh -NL <IP-of-hotspot-host>:<source-port>:<url-to-local-vm>:80 <user-to-vm>
  • int เบราว์เซอร์ iPADs เปิดหน้าด้วย IP
    <IP-of-hotspot-host>:<source-port>

สถานที่รับ 'IP-of-hotspot-host':

หลังจากสร้างฮอตสปอตแล้วจะมี WLAN-Point ใน
การตั้งค่าระบบ MAC OS X >> เครือข่าย >> WLAN

การเพิ่ม ServerAlias:

ที่ development-VM (Apache2) ของ ฉันใน/etc/apache2/sites-available/dkr.dev.localฉันต้องเพิ่มสิ่งต่อไปนี้:

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

1

หากคุณได้สำรวจสิ่งนี้และลิงก์ภายนอกบางส่วนคุณอาจพบคำตอบนี้:

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

เป็นเรื่องเกี่ยวกับเซิร์ฟเวอร์ DNS ที่มีน้ำหนักเบาชื่อว่า dnsmasq ง่ายสุด ๆ ทรงพลังมากและสามารถใช้ร่วมกับเซิร์ฟเวอร์ DNS ภายในหรือภายนอกของคุณได้

ง่ายกว่าการติดตั้งปลาหมึกการเล่นซอกับ Apache และเทคนิคอื่น ๆ ที่ต้องใช้เวลานานและเสี่ยงต่อ "ความสมบูรณ์" ของการกำหนดค่าการพัฒนาสภาพแวดล้อมการทดสอบสภาพแวดล้อม ฯลฯ

คุ้มค่าที่จะพิจารณา

ฉันใช้มันเป็นเครื่องมือปกติสำหรับการพัฒนาและสำหรับเครือข่ายปกติ


1

การใช้เซิร์ฟเวอร์ DNS ที่กำหนดเองบนพีซีสามารถแก้ปัญหานี้ได้ ฉันใช้และทำงานได้อย่างสมบูรณ์

ตรวจสอบhttps://technitium.com/dns/เพื่อดาวน์โหลดเซิร์ฟเวอร์ DNS ที่กำหนดเอง ซึ่งสร้างขึ้นโดยใช้เทคโนโลยี. Net หลังจากกำหนดค่าเครื่องมือนี้คุณต้องเปลี่ยนการตั้งค่า DNS เป็นกำหนดเองและตั้งค่า IP ของพีซีของคุณ เพื่อหลีกเลี่ยงการเปลี่ยน IP ทุกครั้งเมื่อคุณรีสตาร์ทพีซีให้ใช้ IP แบบคงที่บนพีซี


0

ฉันจะลอง Relay Server (ส่วนหนึ่งของ Afaria) ซึ่งสามารถกำหนดทิศทางการรับส่งข้อมูลบนมือถืออีกครั้งตามโปรไฟล์

อัปเดต: คำตอบของ tremoloqui ดูเหมือนจะมีปัญหาน้อยลงและถูกกว่ามาก


0

คำตอบในที่นี้ถูกต้อง ความรู้เพิ่มเติม: สิ่งเหล่านี้ใช้ไม่ได้กับการตรึงใบรับรอง สิ่งที่คุณทำได้คือ (1) ใช้ใบรับรองตัวแทนโดเมนเพื่อสนับสนุนการทดสอบภูมิภาค dev / test / qa ของคุณ และ / หรือ (2) ใช้พร็อกซีเซิร์ฟเวอร์ย้อนกลับเช่น Apache โดยคุณเปลี่ยนเป็นตำแหน่งที่ Apache กำหนดเส้นทางคำขอภายในเครือข่ายของคุณ ตอนนี้เมื่อคุณเข้าสู่การทดสอบ SSL Pinning คุณจะตายในน้ำด้วยอุปกรณ์ทางกายภาพและสามารถตรวจสอบได้ด้วยโปรแกรมจำลอง (ios) และโปรแกรมจำลอง (android) เท่านั้น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.