Javascript 如何使用嵌入式网络摄像头PTZ CGI命令停止CORS错误
升级到新的网络摄像头后,我必须将控制网络摄像头上PTZ的代码更改为:Javascript 如何使用嵌入式网络摄像头PTZ CGI命令停止CORS错误,javascript,get,cors,Javascript,Get,Cors,升级到新的网络摄像头后,我必须将控制网络摄像头上PTZ的代码更改为: function buttonDown(button) { document.getElementById("status").innerHTML = "button " + button.id + " pressed"; $.get("http://192.168.1.111:88/cgi-bin/CGIProxy.fcgi?cmd=ptzMoveDown&user=user&pwd=pass",
function buttonDown(button) {
document.getElementById("status").innerHTML = "button " + button.id + " pressed";
$.get("http://192.168.1.111:88/cgi-bin/CGIProxy.fcgi?cmd=ptzMoveDown&user=user&pwd=pass", function() {
//on successful call
});
}
现在,我在控制台中得到了这个错误:
“阻止跨源请求:同一源策略不允许在读取远程资源。(原因:CORS请求未成功)。2”
当我在浏览器窗口中使用CGI命令粘贴URL时,一切正常。
我读过这个解决方案,但我不理解或不知道如何实现它。我不使用node或js,只使用html和javascript。我需要在我的网页中添加什么来阻止此错误?根据来自的类似stackoverflow答案找到了简单的解决方案。我发现了一个小型代理服务器proxy.js,这消除了CORS错误 将我的功能从:
function cam_down()
{
$.get("http://192.168.1.111:88/cgi-bin/CGIProxy.fcgi?cmd=ptzMoveDown&usr=user&pwd=pass&", function() {
});
致:
下面是proxy.js,该代码与同一Web服务器上的节点一起运行。
太好了
// Simple proxy/forwarding server for when you don't want to have to add CORS during development.
// Usage: node proxy.js
// Open browser and navigate to http://localhost:9100/[url]
// Example: http://localhost:9100/http://www.google.com
// This is *NOT* for anything outside local development. It has zero error handling among other glaring problems.
// This started as code I grabbed from this SO question: http://stackoverflow.com/a/13472952/670023
var url = require('url')
, http = require('http')
, https = require('https');
var PORT = process.argv[2] || 9100;
var server = http.createServer(function(req, res) {
var reqUrl = req.url.substr(1);
console.log('==> Making req for' + reqUrl + '\n');
req.pause();
var options = url.parse(reqUrl);
options.headers = req.headers;
options.method = req.method;
options.agent = false;
options.headers['host'] = options.host;
var connector = (options.protocol == 'https:' ? https : http).request(options, function(serverResponse) {
console.log('<== Received res for', serverResponse.statusCode, reqUrl);
console.log('\t-> Request Headers: ', options);
console.log(' ');
console.log('\t-> Response Headers: ', serverResponse.headers);
serverResponse.pause();
serverResponse.headers['access-control-allow-origin'] = '*';
switch (serverResponse.statusCode) {
// pass through. we're not too smart here...
case 200: case 201: case 202: case 203: case 204: case 205: case 206:
case 304:
case 400: case 401: case 402: case 403: case 404: case 405:
case 406: case 407: case 408: case 409: case 410: case 411:
case 412: case 413: case 414: case 415: case 416: case 417: case 418:
res.writeHeader(serverResponse.statusCode, serverResponse.headers);
serverResponse.pipe(res, {end:true});
serverResponse.resume();
break;
// fix host and pass through.
case 301:
case 302:
case 303:
serverResponse.statusCode = 303;
serverResponse.headers['location'] = 'http://localhost:'+PORT+'/'+serverResponse.headers['location'];
console.log('\t-> Redirecting to ', serverResponse.headers['location']);
res.writeHeader(serverResponse.statusCode, serverResponse.headers);
serverResponse.pipe(res, {end:true});
serverResponse.resume();
break;
// error everything else
default:
var stringifiedHeaders = JSON.stringify(serverResponse.headers, null, 4);
serverResponse.resume();
res.writeHeader(500, {
'content-type': 'text/plain'
});
res.end(process.argv.join(' ') + ':\n\nError ' + serverResponse.statusCode + '\n' + stringifiedHeaders);
break;
}
console.log('\n\n');
});
req.pipe(connector, {end:true});
req.resume();
});
console.log('Listening on http://localhost:%s...', PORT);
server.listen(PORT);
//当您不想在开发过程中添加COR时,可以使用简单的代理/转发服务器。
//用法:node proxy.js
//打开浏览器并导航到http://localhost:9100/[网址]
//例如:http://localhost:9100/http://www.google.com
//这不适用于本地开发以外的任何项目。在其他突出问题中,它没有错误处理。
//这是我从这个问题中获取的代码:http://stackoverflow.com/a/13472952/670023
var url=require('url')
,http=require('http')
,https=require('https');
var PORT=process.argv[2]| | 9100;
var server=http.createServer(函数(req,res){
var reqUrl=req.url.substr(1);
console.log('==>为'+reqUrl+'\n'生成请求);
请求暂停();
var options=url.parse(reqUrl);
options.headers=req.headers;
options.method=req.method;
options.agent=false;
options.headers['host']=options.host;
var连接器=(options.protocol=='https:'?https:http).请求(选项,函数(服务器响应){
log('请求头:',选项);
控制台日志(“”);
log('\t->Response Headers:',serverResponse.Headers);
serverResponse.pause();
serverResponse.headers['access-control-allow-origin']='*';
开关(serverResponse.statusCode){
//通过。我们在这里不太聪明。。。
案例200:案例201:案例202:案例203:案例204:案例205:案例206:
案例304:
案例400:案例401:案例402:案例403:案例404:案例405:
案例406:案例407:案例408:案例409:案例410:案例411:
案例412:案例413:案例414:案例415:案例416:案例417:案例418:
res.writeHeader(serverResponse.statusCode,serverResponse.headers);
管道(res,{end:true});
serverResponse.resume();
打破
//固定主机并通过。
案例301:
案例302:
案例303:
serverResponse.statusCode=303;
serverResponse.headers['location']='http://localhost:“+PORT+”/“+serverResponse.headers['location'];
console.log('\t->重定向到',serverResponse.headers['location']);
res.writeHeader(serverResponse.statusCode,serverResponse.headers);
管道(res,{end:true});
serverResponse.resume();
打破
//其他的都错了
违约:
var stringifiedHeaders=JSON.stringify(serverResponse.headers,null,4);
serverResponse.resume();
文书主任(500{
“内容类型”:“文本/普通”
});
res.end(process.argv.join('')+':\n\n错误'+serverResponse.statusCode+'\n'+stringifiedHeaders);
打破
}
console.log('\n\n');
});
请求管道(连接器,{end:true});
resume();
});
console.log('正在侦听http://localhost:%s...",港口),;
监听(端口);
请将“post”替换为“get”。我似乎无法编辑我的问题您的代码是在服务器上运行还是从硬盘上运行?代码是在web服务器上运行。(感谢编辑帮助!)
// Simple proxy/forwarding server for when you don't want to have to add CORS during development.
// Usage: node proxy.js
// Open browser and navigate to http://localhost:9100/[url]
// Example: http://localhost:9100/http://www.google.com
// This is *NOT* for anything outside local development. It has zero error handling among other glaring problems.
// This started as code I grabbed from this SO question: http://stackoverflow.com/a/13472952/670023
var url = require('url')
, http = require('http')
, https = require('https');
var PORT = process.argv[2] || 9100;
var server = http.createServer(function(req, res) {
var reqUrl = req.url.substr(1);
console.log('==> Making req for' + reqUrl + '\n');
req.pause();
var options = url.parse(reqUrl);
options.headers = req.headers;
options.method = req.method;
options.agent = false;
options.headers['host'] = options.host;
var connector = (options.protocol == 'https:' ? https : http).request(options, function(serverResponse) {
console.log('<== Received res for', serverResponse.statusCode, reqUrl);
console.log('\t-> Request Headers: ', options);
console.log(' ');
console.log('\t-> Response Headers: ', serverResponse.headers);
serverResponse.pause();
serverResponse.headers['access-control-allow-origin'] = '*';
switch (serverResponse.statusCode) {
// pass through. we're not too smart here...
case 200: case 201: case 202: case 203: case 204: case 205: case 206:
case 304:
case 400: case 401: case 402: case 403: case 404: case 405:
case 406: case 407: case 408: case 409: case 410: case 411:
case 412: case 413: case 414: case 415: case 416: case 417: case 418:
res.writeHeader(serverResponse.statusCode, serverResponse.headers);
serverResponse.pipe(res, {end:true});
serverResponse.resume();
break;
// fix host and pass through.
case 301:
case 302:
case 303:
serverResponse.statusCode = 303;
serverResponse.headers['location'] = 'http://localhost:'+PORT+'/'+serverResponse.headers['location'];
console.log('\t-> Redirecting to ', serverResponse.headers['location']);
res.writeHeader(serverResponse.statusCode, serverResponse.headers);
serverResponse.pipe(res, {end:true});
serverResponse.resume();
break;
// error everything else
default:
var stringifiedHeaders = JSON.stringify(serverResponse.headers, null, 4);
serverResponse.resume();
res.writeHeader(500, {
'content-type': 'text/plain'
});
res.end(process.argv.join(' ') + ':\n\nError ' + serverResponse.statusCode + '\n' + stringifiedHeaders);
break;
}
console.log('\n\n');
});
req.pipe(connector, {end:true});
req.resume();
});
console.log('Listening on http://localhost:%s...', PORT);
server.listen(PORT);