从不同的域访问bugzilla webservice的好方法是什么?

时间:2011-03-02 03:02:03

标签: javascript ajax web-services perl bugzilla

我有两个网站products.company.combugzilla.internal.com。我想从products.company.com页面访问错误信息。我设置了一个jQuery ajax函数来对bugzilla.internal.com/jsonrpc.cgi进行jsonrpc调用。但是由于跨域脚本限制,这被apache阻止(正如预期的那样)。然后我将ajax拍摄到products.company.com上的cgi脚本,然后在该脚本中使用curl将请求发送到bugzilla.internal.com/jsonrpc.cgi,但现在它说

  

您无权访问   /jsonrpc.cgi

怎么办?

如果它使任务更简单,我只想使用get bug功能。

3 个答案:

答案 0 :(得分:1)

你有几个选择。您可以products.company.combugzilla.internal.com发出请求,并将其作为代理。

另一种选择是使用来自客户端的jsonp - 这将允许跨域调用。 Here's关于jsonp入门的一篇非常好的IBM文章。

答案 1 :(得分:1)

如果您的products.company.com上的Web服务器是Apache,则可以设置ProxyPass。

如果您无法修改Web服务器配置,那么products.company.com上的简单代理cgi就可以解决这个问题:

#!/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;

答案 2 :(得分:0)

有几种解决跨域脚本限制的方法。我没有测试过,但是easyXDM似乎做了你想做的事。