使用cUrl请求svg.sencha.io时出现错误请求

时间:2015-01-14 15:06:57

标签: javascript php extjs curl svg

我正在尝试使用Extjs的功能将图形转换为图像。我不是直接从javascript请求svg.sencha.io,相反,我试图在我的PHP代码中使用cUrl调用。出于某些原因,从php调用它是我唯一的选择,并且使用我现在使用的cUrl代码,我总是得到“错误的请求”。所以,我的问题是:这附前有没有人处理过这种情况?这是我正在尝试使用的代码:

    $url = 'http://svg.sencha.io';

    $ch = curl_init();

    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $_POST);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

    $file = curl_exec($ch);

    curl_close($ch);

    var_dump($file);

$_POST包含参数类型,宽度,高度和svg。它们似乎很好,因为我直接从我的机器上运行cUrl并且它工作正常。所以问题实际上是cUrl和php。 var_dump($file);打印string(12) "Bad request."

我真的很感激一些帮助,我已经坚持了一段时间了。

1 个答案:

答案 0 :(得分:0)

我找到了解决方案(至少目前看起来似乎有效)。

解决方案不是使用cUrl而是使用替代方案。所以,我搜索了一些内容,然后我进入了这篇文章:http://wezfurlong.org/blog/2006/nov/http-post-from-php-without-curl/。帖子上的函数起初对我不起作用,但在阅读了几乎所有的评论后,我做了一点改动,这是向svg.sencha.io发出POST请求并正确返回图像的函数:

function _postRequest($url, $data, $optional_headers = null) {
    $params = array('http' => array(
                    'method' => 'POST',
                    'content' => http_build_query($data)
               ));
    if ($optional_headers !== null) {
        $params['http']['header'] = $optional_headers;
    }
    $ctx = stream_context_create($params);
    $fp = @fopen($url, 'rb', false, $ctx);
    if (!$fp) {
        throw new Exception("Problem with $url, $php_errormsg");
    }
    $response = @stream_get_contents($fp);
    if ($response === false) {
        throw new Exception("Problem reading data from $url, $php_errormsg");
    }
    return $response;
}

根据该帖子的评论部分的某人,这个方法比cUrl慢(并且进程确实很慢),但显然没有其他选项。