נסיון לגשת לאתר באמצעות פרוקסי
-
מנסה לגשת דרך פרוקסי ל-API הזה, שפתוח באופן כללי, אבל כנראה סגור לשרתי אירוח מסויימים. יש פרוקסים שלא מחזירים תגובה בכלל, ויש כאלו שמחזירים לי שגיאת 400.
דוגמאubuntu@vps-123456:~$ curl -i -v --proxy https://hidemy.name/en/proxy-list:8080 "https://www.nadlan.gov.il/Nadlan.REST/Main/GetNeighborhoodsListByCityAndStartsWith?cityName=%D7%99%D7%A8%D7%95%D7%A9%D7%9C%D7%99%D7%9D&startWithKey=-1">1.txt 2>&1
הנה הפלט
% Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0* Trying 172.67.71.85:443... * TCP_NODELAY set * Connected to hidemy.name (172.67.71.85) port 443 (#0) * ALPN, offering http/1.1 * successfully set certificate verify locations: * CAfile: /etc/ssl/certs/ca-certificates.crt CApath: /etc/ssl/certs } [5 bytes data] * TLSv1.3 (OUT), TLS handshake, Client hello (1): } [512 bytes data] * TLSv1.3 (IN), TLS handshake, Server hello (2): { [122 bytes data] * TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8): { [25 bytes data] * TLSv1.3 (IN), TLS handshake, Certificate (11): { [2300 bytes data] * TLSv1.3 (IN), TLS handshake, CERT verify (15): { [80 bytes data] * TLSv1.3 (IN), TLS handshake, Finished (20): { [52 bytes data] * TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1): } [1 bytes data] * TLSv1.3 (OUT), TLS handshake, Finished (20): } [52 bytes data] * SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384 * ALPN, server accepted to use http/1.1 * Proxy certificate: * subject: C=US; ST=California; L=San Francisco; O=Cloudflare, Inc.; CN=hidemy.name * start date: Apr 5 00:00:00 2023 GMT * expire date: Apr 4 23:59:59 2024 GMT * subjectAltName: host "hidemy.name" matched cert's "hidemy.name" * issuer: C=US; O=Cloudflare, Inc.; CN=Cloudflare Inc ECC CA-3 * SSL certificate verify ok. * allocate connect buffer! * Establish HTTP proxy tunnel to www.nadlan.gov.il:443 } [5 bytes data] > CONNECT www.nadlan.gov.il:443 HTTP/1.1 > Host: www.nadlan.gov.il:443 > User-Agent: curl/7.68.0 > Proxy-Connection: Keep-Alive > { [5 bytes data] * TLSv1.3 (IN), TLS handshake, Newsession Ticket (4): { [238 bytes data] * TLSv1.3 (IN), TLS handshake, Newsession Ticket (4): { [238 bytes data] < HTTP/1.1 400 Bad Request < Server: cloudflare < Date: Tue, 04 Jul 2023 18:46:28 GMT < Content-Type: text/html < Content-Length: 155 < Connection: close < CF-RAY: - < * Received HTTP code 400 from proxy after CONNECT * CONNECT phase completed! * Closing connection 0 } [5 bytes data] curl: (56) Received HTTP code 400 from proxy after CONNECT HTTP/1.1 400 Bad Request Server: cloudflare Date: Tue, 04 Jul 2023 18:46:28 GMT Content-Type: text/html Content-Length: 155 Connection: close CF-RAY: -
כלומר זה נראה שהחיבור ל-gov.il מצליח אבל מוחזר 400.
גם אלו מחזירים 400
https://www.proxysite.com
https://www.kproxy.com/
https://www.hidemyass.com/proxy
https://www.filterbypass.me
ועוד.השאלות הן
א. האם הפרוקסי רק מעביר לי 400 שקיבל בעצמו מהשרת, או שה-400 נוצר בפרוקסי עצמו משום מה.
ב. כך או כך למה באמת יש 400? יש משהו שגוי בסינטקס של ה-curl?אציין שגם כשאני מנסה על אתר אחר כמו זה (יושב על cloudflare)
curl -X -i -v --proxy https://www.proxysite.com https://www.jdn.co.il >1.txt 2>&1
הוא עדיין מחזיר 400. -
@aaron כתב בנסיון לגשת לאתר באמצעות פרוקסי:
הכתובת של הפרוקסי שהגדרת לא נכונה
אודה לך אם תכוון אותי יותר.
אציין שניסיתי גם את השיטה הבאה:
ubuntu@vps-123456:~$ echo $http_proxy https://www.hidemyass.com/proxy ubuntu@vps-123456:~$ curl -v -i "https://www.nadlan.gov.il/Nadlan.REST/Main/GetNeighborhoodsListByCityAndStartsWith?cityName=ירושלים&startWithKey=-1"
והוא מחזיר לי את זה:
* Trying 147.237.1.97:443... * TCP_NODELAY set * connect to 147.237.1.97 port 443 failed: Connection timed out * Failed to connect to www.nadlan.gov.il port 443: Connection timed out * Closing connection 0 curl: (28) Failed to connect to www.nadlan.gov.il port 443: Connection timed out
-
@yyy כתב בנסיון לגשת לאתר באמצעות פרוקסי:
יש משהו שגוי בסינטקס של ה-curl?
נשמע שזו הבעיה,
לא בדקתי עם Curl ואני לא יודע איך הוא מעביר את הפרמטרים, אבל בדוגמא זו למשלhttps://cors-get-proxy.sirjosh.workers.dev/?url=https://www.nadlan.gov.il/Nadlan.REST/Main/GetNeighborhoodsListByCityAndStartsWith?cityName=%D7%99%D7%A8%D7%95%D7%A9%D7%9C%D7%99%D7%9D&startWithKey=-1
מתקבלת שגיאה והסיבה היא שה-URL מכיל פרמטרים בעצמו כשהוא עצמו מועבר כפרמטר.
הפתרון יכול להיות להשתמש בפונקציה encodeURIComponent של JavaScript כדי להמיר את ה-URL הפנימי למחרוזת מקודדת.
לאחר שהמרת את ה-URL הפנימי למחרוזת מקודדת, אתה יכול להשתמש בהם כפרמטר ל-URL של הפרוקסי. הפרוקסי מפענח את המחרוזת המקודדת ומבצע את הבקשה ל-URL המקורי שהעברת.
const targetUrl = 'https://www.nadlan.gov.il/Nadlan.REST/Main/GetNeighborhoodsListByCityAndStartsWith?cityName=%D7%99%D7%A8%D7%95%D7%A9%D7%9C%D7%99%D7%9D&startWithKey=-1'; const encodedUrl = encodeURIComponent(targetUrl); const proxyUrl = `https://cors-get-proxy.sirjosh.workers.dev/?url=${encodedUrl}`; fetch(proxyUrl) .then(response => response.json()) .then(data => console.log(data)) .catch(error => console.error('Error:', error));
וכך יראה הURL הסופי במקרה זה:
https://cors-get-proxy.sirjosh.workers.dev/?url=https%3A%2F%2Fwww.nadlan.gov.il%2FNadlan.REST%2FMain%2FGetNeighborhoodsListByCityAndStartsWith%3FcityName%3D%25D7%2599%25D7%25A8%25D7%2595%25D7%25A9%25D7%259C%25D7%2599%25D7%259D%26startWithKey%3D-1
אולי צריך לעשות אנלוגיה דומה לגישה באמצעות cURL. למרות שאם הURL בתוך גרשיים לכאורה זה כן אמור להיות תקין גם כך.
יתכן שאני מקשקש. אבל רושם כי בכל זאת אולי יועיל. מקסימום אתה יכול להשתמש בשירות הPROXY הזה כפי שהוא.
הפתרון לבעיה שאני נתקלתי בה באדיבות GPT4. -
דבר ראשון המרתי את הקוד ל-C#:
GNU nano 4.8 Program.cs // See https://aka.ms/new-console-template for more information static async Task<string> FetchData() { string targetUrl = "https://www.nadlan.gov.il/Nadlan.REST/Main/GetNeighborhoodsListByCityAndStartsWith?cityName=ירושלים&startWithKey=-1"; Console.WriteLine("targetUrl: "+targetUrl); string encodedUrl = Uri.EscapeUriString(targetUrl); Console.WriteLine("encodedUrl: "+encodedUrl); string proxyUrl = $"https://cors-get-proxy.sirjosh.workers.dev/?url={encodedUrl}"; Console.WriteLine("proxyUrl: "+proxyUrl); using (HttpClient client = new HttpClient()) { try { HttpResponseMessage response = await client.GetAsync(proxyUrl); response.EnsureSuccessStatusCode(); string responseBody = await response.Content.ReadAsStringAsync(); return responseBody; } catch (Exception e) { Console.WriteLine("Error: " + e.Message); return null; } } } string result = await FetchData(); Console.WriteLine(result);
דבר שני הרצתי dotnet run וזה הפלט:
ubuntu@vps-123456:$ dotnet run targetUrl: https://www.nadlan.gov.il/Nadlan.REST/Main/GetNeighborhoodsListByCityAndStartsWith?cityName=ירושלים&startWithKey=-1 encodedUrl: https://www.nadlan.gov.il/Nadlan.REST/Main/GetNeighborhoodsListByCityAndStartsWith?cityName=%D7%99%D7%A8%D7%95%D7%A9%D7%9C%D7%99%D7%9D&startWithKey=-1 proxyUrl: https://cors-get-proxy.sirjosh.workers.dev/?url=https://www.nadlan.gov.il/Nadlan.REST/Main/GetNeighborhoodsListByCityAndStartsWith?cityName=%D7%99%D7%A8%D7%95%D7%A9%D7%9C%D7%99%D7%9D&startWithKey=-1 <!DOCTYPE html> ... </html>
בתוכן של ה-html אני מקבל עמוד שגיאה כזה
השוותי בין הכתובות וראיתי שאצלי הוא לא מקודד את התוים "/" ו-"=" וכנראה מכאן השגיאה. אצטרך לראות איך אני מתקן את זה.
בכל אופן הרבה תודה.