从网页运行 curl http 请求
Posted
技术标签:
【中文标题】从网页运行 curl http 请求【英文标题】:running curl http request from a webpage 【发布时间】:2017-09-22 14:44:43 【问题描述】:我有以下 curl 命令,可以在 bash shell 中正常运行
$ curl -d '"img_url":"http://ec2-54-167-249-150.compute-1.amazonaws.com/IMG_86478_mono.bmp","engine":"tesseract"' http://ec2-54-226-250-92.compute-1.amazonaws.com:8080/ocr
我现在想通过一个简单的网页点击按钮来运行它。 这是我的 javascript
function processImage()
$.ajax(
url: 'http://ec2-54-226-250-92.compute-1.amazonaws.com:8080/ocr',
cache: false,
type : "POST",
data: img_url : 'http://ec2-54-167-249-150.compute-1.amazonaws.com/IMG_86478_mono.bmp',
engine : 'tesseract' ,
dataType: 'json',
success: function(response)
alert("success");
);
但是当我通过网页按钮运行此 javascript 时,单击它会给我以下错误 “网络错误:500 内部服务器错误 - http://ec2-54-226-250-92.compute-1.amazonaws.com:8080/ocr” 而且我的 success() 方法永远不会被调用。
正如我所说,我知道服务器没有任何问题,因为它在从 linux cmd 提示符调用时工作正常。问题是我的 javascript 出了什么问题?
【问题讨论】:
你确定 curl 对你有用吗?我的给出了错误(不正确的输出),但使用了-POST
标志! :)
抱歉,是的,需要 POST 标志。我在 ajax 调用中添加了 POST 标志
【参考方案1】:
您正在向与您的页面所在的域不同的域执行 XMLHttpRequest。因此浏览器会阻止它,因为出于安全原因,它通常允许同一来源的请求。当您想要进行跨域请求时,您需要做一些不同的事情。关于如何实现这一点的教程是使用 CORS。
注意-当您使用邮递员时,他们不受此政策的限制。引自跨域 XMLHttpRequest
常规网页可以使用 XMLHttpRequest 对象从远程服务器发送和接收数据,但它们受到同源策略的限制。扩展并没有那么有限。只要首先请求跨域权限,扩展程序就可以与其源之外的远程服务器通信。
【讨论】:
是的,这似乎是问题所在。我想我需要访问主机服务器才能将此 CORS 访问文件添加到其中?当我将 ULR 粘贴到浏览器导航窗口中时,它应该是什么样子才能工作?这不应该与使用 curl 运行请求相同吗?我试过ec2-54-226-250-92.compute-1.amazonaws.com:8080/… 但它返回json格式错误:( 我想您需要使用服务器端脚本来执行此操作,例如使用 php 脚本 - 在您的同一台服务器上有一个基本 api 来使用 curl() 调用 url;这有意义吗? 有点,如果 XDomain 问题可以通过让本地服务器上的代理服务调用目标 url 来解决,那么 XDomain 安全性有什么意义?【参考方案2】:Curl 确实对我有用,但是当我尝试通过 jQuery 访问时,我得到了一个 500 错误,就像你一样。当我用谷歌搜索错误时,它几乎总是因为您的 .htaccess 文件中缺少参数:
How can I fix the 'Missing Cross-Origin Resource Sharing (CORS) Response Header' webfont issue?
CORS header 'Access-Control-Allow-Origin' missing
【讨论】:
以上是关于从网页运行 curl http 请求的主要内容,如果未能解决你的问题,请参考以下文章