Javascript 在API请求中隐藏引用者标头

Javascript 在API请求中隐藏引用者标头,javascript,api,google-api,cross-domain,referrer,Javascript,Api,Google Api,Cross Domain,Referrer,我需要请求谷歌将文本翻译成语音API。我有一个已启用的密钥,但一直被无访问控制阻止 我在这里发布了更多关于它的信息: 以下消息来源,并表示 如果HTTP请求包含Referer,Google将返回404错误 不是空字符串的标题 给出如下请求: $.get('https://translate.google.com/translate_tts?key='+myKey+'&ie=utf-8&tl=en&q=Hello+world', function

我需要请求谷歌将文本翻译成语音API。我有一个已启用的密钥,但一直被无访问控制阻止

我在这里发布了更多关于它的信息:

以下消息来源,并表示

如果HTTP请求包含Referer,Google将返回404错误 不是空字符串的标题

给出如下请求:

    $.get('https://translate.google.com/translate_tts?key='+myKey+'&ie=utf-8&tl=en&q=Hello+world',
        function (returned_data) {
如何隐藏或删除推荐人标题,使我不被阻止

说要放
https://href.li/...
在前面。所以我把它改成:

$.get('https://href.li/?https://translate.google.com/translate_tts?key='+key+'&ie=utf-8&tl=zh-CN&q=你好',
我还是被封锁了


服务器端尝试:无响应

    $.ajax({
        url: 'https://translate.google.com/translate_tts?key='+key+'&ie=utf-8&tl=zh-CN&q=你好',
            type: 'GET',
            dataType: 'jsonp',
            error: function(xhr, status, error) {
            alert("error");
        },
        success: function(json) {
            alert("success");
        }
        });
提供一个服务器端脚本,用于将引用设置为空字符串。他说:

这将从该访问点获取信息,并立即将其吐出。但在使用file_get_内容请求数据之前,Referer头被设置为空字符串

/php/testPHP.php:

index.php(根):


HTML/JS文本语音转换尝试:404块

js:


$(函数(){
$('a.say')。关于('click',函数(e){
e、 预防默认值();
var text=$('input[name=“text”]”)。val();
text=encodeURIComponent(文本);
console.log(文本);
//var url='1〕https://translate.google.com/translate_tts?&ie=utf-8&tl=zh CN&q='+文本;
var url='1〕https://translate.google.com/translate_tts?ie=UTF-8&q='+text+'&tl=en';
$('audio').attr('src',url).get(0.play();
});
});
html:



正如你在这把小提琴中看到的-, 您可以通过调用
setRequestHeader
覆盖标题值

但是,有些标题被阻止,浏览器无法覆盖

/*global jQuery*/
(function ($) {
    $.ajaxSetup({
        "beforeSend": function(xhr) {
            // Works fine.
            xhr.setRequestHeader("X-Requested-With", {
                toString: function() {
                    return "";
                }
            });
            // Logs error on Chrome (probably others) as "Refused to set unsafe header "Referer".
            xhr.setRequestHeader("Referer", {
                toString: function() {
                    return "";
                }
            });
        }
    });
}(jQuery));

jQuery(function () {
    $.ajax({
        url: "http://fiddle.jshell.net/",
        dataType: "html"
    }).done(function (data) {
        $("<div>").text("ajax success").appendTo("body");
    });
});
/*全局jQuery*/
(函数($){
$.ajaxSetup({
“发送前”:函数(xhr){
//很好。
xhr.setRequestHeader(“X-request-With”{
toString:function(){
返回“”;
}
});
//将Chrome(可能是其他浏览器)上的错误记录为“拒绝设置不安全的标题”Referer。
setRequestHeader(“Referer”{
toString:function(){
返回“”;
}
});
}
});
}(jQuery));
jQuery(函数(){
$.ajax({
url:“http://fiddle.jshell.net/",
数据类型:“html”
}).完成(功能(数据){
$(“”).text(“ajax成功”).appendTo(“正文”);
});
});

PHP脚本失败的原因:

如果您查看PHP的错误响应:

PHP Warning: file_get_contents(https://translate.google.com/translate_tts?ie=utf-8&q=the+brown+fox+jumped+over+the+lazy+dog)
您会注意到,请求的url
文件\u get\u contents
不包含
tl
参数。这会导致返回404。您可以直接在浏览器中访问该页面:

上面返回404响应:(


但是,在我们添加了一个新的闪亮的
tl=en
参数之后,它就可以工作了:)。

我认为您需要编写服务器端程序,将请求传输到google.browser->transmiter(executs http request w/o Referer)->google api这个博客,在底部给出了一个
PHP
脚本。我测试了它,但是失败了。请看editI正在传递tl参数,
testPHP.PHP?translate_tts?tl=en…
,PHP
http_build_query
似乎是我传递参数时的问题:
http_build_query(数组(“ie=>“utf-8”,“tl=”>$”GET[“tl”],“q“=>$\u GET[“q”])
。它没有识别出那个索引。访问日志显示正确传入的
tl
参数。参见编辑
    <script>
        $(function() {
            $('a.say').on('click', function(e) {
                e.preventDefault();
                var text = $('input[name="text"]').val();
                text = encodeURIComponent(text);
                console.log(text);
                //var url = 'https://translate.google.com/translate_tts?&ie=utf-8&tl=zh-CN&q=' + text;
                var url = 'https://translate.google.com/translate_tts?ie=UTF-8&q=' + text + '&tl=en';
                $('audio').attr('src', url).get(0).play();
            });
        });
    </script>
    <input type="text" name="text">
    <a href="#" class="say">Say it</a>

    <audio src="" class="speech" hidden></audio>
/*global jQuery*/
(function ($) {
    $.ajaxSetup({
        "beforeSend": function(xhr) {
            // Works fine.
            xhr.setRequestHeader("X-Requested-With", {
                toString: function() {
                    return "";
                }
            });
            // Logs error on Chrome (probably others) as "Refused to set unsafe header "Referer".
            xhr.setRequestHeader("Referer", {
                toString: function() {
                    return "";
                }
            });
        }
    });
}(jQuery));

jQuery(function () {
    $.ajax({
        url: "http://fiddle.jshell.net/",
        dataType: "html"
    }).done(function (data) {
        $("<div>").text("ajax success").appendTo("body");
    });
});
PHP Warning: file_get_contents(https://translate.google.com/translate_tts?ie=utf-8&q=the+brown+fox+jumped+over+the+lazy+dog)