Какой хороший способ получить доступ к веб-сервису bugzilla из другого домена? - PullRequest
0 голосов
/ 02 марта 2011

У меня есть два сайта products.company.com и bugzilla.internal.com.Я хотел бы получить доступ к информации об ошибках на странице products.company.com.Я настроил функцию jQuery ajax, чтобы сделать вызов jsonrpc на bugzilla.internal.com/jsonrpc.cgi.Однако из-за междоменных сценариев ограничения были заблокированы Apache (как и ожидалось).Затем я выстрелил ajax в скрипт cgi на products.company.com, а затем использовал curl в этом скрипте, чтобы отбросить запрос до bugzilla.internal.com/jsonrpc.cgi, но теперь он говорит:

Вы не делаетеу меня есть разрешение на доступ к /jsonrpc.cgi

Что делать?

Если это облегчает задачу, я хочу использовать только функцию get bug .

Ответы [ 3 ]

1 голос
/ 02 марта 2011

Если вашим веб-сервером на products.company.com является Apache, вы можете настроить ProxyPass.

Если вы не можете изменить конфигурацию веб-сервера, то простой прокси-сервер cgi на products.company.com может решить эту проблему:

#!/usr/bin/perl

use LWP::UserAgent;
use CGI qw(:standard);



my $URL='http://bugzilla.internal.com/jsonrpc.cgi';

my $q = new CGI;
my $query = &query_string();

my $req = HTTP::Request->new(POST => $URL);
$req->content_type('application/x-www-form-urlencoded');
$req->content($query);

my $ua = LWP::UserAgent->new;
$res = $ua->request($req);

if ($res->is_success) {
   printf "Content-Type: %s\n\n", $res->header('Content-Type');
   print $res->content;
} else {
   printf "Content-Type: text/plain\n\n";
   print "Error: " . $res->status_line . "\n";
}



print $cgi->header(-type => 'text/xml');
print $response->decoded_content;
1 голос
/ 02 марта 2011

У вас есть пара вариантов. Вы можете products.company.com сделать запрос к bugzilla.internal.com и сделать его в основном прокси-сервером.

Другим вариантом будет использование jsonp от клиента - это позволит выполнять междоменные вызовы. Вот довольно хорошая статья IBM по началу работы с jsonp.

0 голосов
/ 02 марта 2011

Существует несколько способов обойти ограничения междоменных сценариев.Я не проверял это, но easyXDM , кажется, делает то, что вы хотите.

...