从网页运行 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 请求的主要内容,如果未能解决你的问题,请参考以下文章

PHP中使用CURL实现GET和POST请求

PHP中使用CURL实现GET和POST请求

如何在不使用 CURL 的情况下运行 HTTP 请求

sh bash脚本运行循环以从文件中读取随机URL和用户代理,并使用cURL运行请求。这可以从任何系统运行

php中的cURL不起作用

如何利用CURL向网页提交数据