2011-10-06 6 views
14

Mam witrynę http://, która musi uzyskać dostęp do interfejsu JSON API innej firmy, który jest dostępny w witrynie https://. Czytałem przez Ways to circumvent the same-origin policy, ale wydaje się, że opisane metody nie są odpowiednie dla mnie:Jak ominąć zasady tego samego pochodzenia dla witryny https firmy zewnętrznej?

  1. Sposób document.domain - działa tylko na subdomenach.
  2. Metoda udostępniania źródeł krzyżowych - wymaga współpracy serwera.
  3. Metoda window.postMessage - wydaje się wymagać otwarcia okna podręcznego?
  4. Metoda Reverse Proxy - Możliwe rozwiązanie, ale wydaje się zbyt trudne do skonfigurowania.
  5. http://anyorigin.com - Wydaje się nie obsługiwać protokołu SSL.

Czy to jest to? Czy muszę wdrożyć rozwiązanie 4, które wydaje się dość skomplikowane, czy też czegoś brakuje?

+3

Czy nie Curl wynik z drugiej strony ze zwykłej stronie PHP na własnej domenie, a następnie chwyć JSON z tej strony PHP? –

+0

Czy [JSONP] (http://en.wikipedia.org/wiki/JSONP) nie działałby tutaj? – jwueller

+0

Jestem prawie pewny, że anyorigin.com obsługuje SSL. Spróbuj pobrać 'https: // test.kems.net /', na przykład - działa dobrze. –

Odpowiedz

12

Niestety, wydaje się, że anyorigin.com robi obsługa protokołu HTTPS.

Powodem, dla którego naiwnie uważałem, że tak nie jest, jest to, że API in question zwraca JSON, i myślałem, że właśnie dostanę zwykłą odpowiedź tekstową (jak w moich testach z użyciem anyorigin.com na google.com). Kiedy wrócił tylko object, pomyślałem, że coś jest zepsute.

Wygląda na to, że obiekt po prostu zwraca sparsowany JSON, więc dobrze mi pójść!

Aktualizacja - anyorigin.com przestał działać z niektórych witryn https kilka tygodni po tym, jak pisał to, więc poszedł do przodu i napisał whateverorigin.org, open source alternatywę dla anyorigin.

+0

@RobW - proszę otworzyć numer na github. Zbadam to w piątek (nie mogę niczego obiecać wcześniej) - https://github.com/ripper234/Whatever-Origin – ripper234

+0

te metody nie zadziałają, jeśli zdalny serwer zwróci inną treść na podstawie tego, kto prosi o coś. Na przykład, YouTube zwraca stronę internetową z filmem, z którego można wyodrębnić URL odtwarzania mówiący o MP4, który działa tylko (powiedzmy, aby pobrać jako plik .mp4), jeśli jest używany od dzwoniącego, a nie od klienta dzwoniącego (gdy dzwoniący jest proxy) –

+0

** Napisałem odpowiedź na to pytanie tutaj: [Ładowanie strony html z domeny jQuery AJAX] (http://stackoverflow.com/questions/15005500/loading-cross-domain-html-page-with -jquery-ajax/17299796 # 17299796) ** - _ ostatni, obsługuje https_ – jherax

0

JSONP powinien znajdować się na liście i wyżej. Prawie standard. Wymaga współpracy serwera, ale większość API powinna wiedzieć, co robi i go wspierać.

here jest prawdziwym podstawowy writeup jak to działa

3

Możesz użyć Ajax-cross-origin do wtyczki jQuery. Za pomocą tej wtyczki korzystasz z krzyżowej domeny jQuery.ajax().

Jest bardzo prosty w obsłudze:

$.ajax({ 
     crossOrigin: true, 
     url: url, 
     success: function(data) { 
      console.log(data); 
     } 
    }); 

można przeczytać więcej tutaj: http://www.ajax-cross-origin.com/