如何将自定义错误消息返回到PHP的cURL?

如何将自定义错误消息返回到PHP的cURL?,php,perl,curl,cgi,Php,Perl,Curl,Cgi,我正在使用PHP cURL multi在另一台服务器上发出HTTP请求。另一台服务器上的脚本是Perl/CGI。如果出现致命错误,除非有更好的方法,否则我想抛出500服务器错误 这是我的PHP。请注意,fb是对FireHP记录器的过程调用 $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "http://otherserver.com/cgi-bin/myCgiScript.cgi"); curl_setopt($ch, CURLOPT_HEAD

我正在使用PHP cURL multi在另一台服务器上发出HTTP请求。另一台服务器上的脚本是Perl/CGI。如果出现致命错误,除非有更好的方法,否则我想抛出500服务器错误

这是我的PHP。请注意,fb是对FireHP记录器的过程调用

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, "http://otherserver.com/cgi-bin/myCgiScript.cgi");
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

// grab URL and pass it to the browser
$result = curl_exec($ch);
if ($result === false) {
    $errno = curl_errno($ch);
    $error = curl_error($ch);
    print "errno:\n";
    var_dump($errno);
    print "error:\n";
    var_dump($error);
} else {
    print "result:\n";
    var_dump($result);
}
$info = curl_getinfo($ch);
print "info:\n";
var_dump($info);

curl_close($ch);
下面是另一台服务器上的Perl CGI文件示例:

#!/usr/bin/perl

use strict;
use warnings;
use CGI;
use Try::Tiny;

my $q = new CGI();

try {

   # Code that might die().

   print $q->header({
      -type => "application/json",
      -status => "200 OK"
   });

   print $results;

} catch {
   my $message = $_;
   chomp($message);

   print $q->header({
      -type => "application/json",
      -status => "500 Server Error",
      -message => $message
   });

};
但无论我做什么,我似乎都无法将消息文本从卷曲中取出。我也无法获得500服务器错误中的服务器错误部分。我得到了一个事实,我得到了一个500错误,但没有文字来配合它

编辑:

我简化了PHP示例

现在它没有走上失败的道路。。。i、 e.如果我的CURLOPT_HEADER=0,它只是返回,如果CURLOPT_HEADER=1,则返回500服务器错误的文本:


你能做一个像这样的重定向吗

header( 'Location: http://www.yoursite.com/error.php?error=5000' ) ; 

并让您的php和使用$_获得[error'];然后让php来完成这项工作?

您已经说过您的内容类型是JSON,但它不是格式错误的JSON字符串。为错误设置文本的内容类型,您应该可以。

1将示例归结为一些有用的内容-Perl只需要引发500个错误,不要弄乱JSON等。PHP不需要多次请求或成功处理-只需检查错误代码,然后查找消息。然后,2向我们展示你实际做了些什么。将示例编辑得更简单,提供了输出。我想我可以。我希望有更优雅一点的东西。i、 例如,我希望curl_exec返回false,并能够传递一条可以从curl_error或curl_getinfo中检索到的错误消息。我很少使用curl,我只做了一点谷歌搜索:希望我知道更多。我和你会很高兴离开标题位置…我会试试。谢谢
header( 'Location: http://www.yoursite.com/error.php?error=5000' ) ;