使用 cUrl 请求 svg.sencha.io 时请求错误
Bad request when requesting svg.sencha.io with cUrl
我正在尝试使用 Extjs 的功能将图形转换为图像。我不是直接从 javascript 请求 svg.sencha.io,而是尝试在我的 php 代码中使用 cUrl 进行调用。出于某些原因,从 php 调用它是我唯一的选择,使用我现在使用的 cUrl 代码,我总是得到 "Bad request"。所以,我的问题是:附近有没有人处理过这种情况?这是我尝试使用的代码:
$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
包含参数type、width、height和svg。它们看起来还不错,因为我直接从我的机器上运行了 cUrl,它运行正常。所以问题确实出在 cUrl 和 php 上。
var_dump($file);
输出 string(12) "Bad request."
非常感谢您的帮助,我已经被困在这个问题上一段时间了。
我找到了解决方案(至少目前看来是可行的)。
解决方案不是使用 cUrl,而是使用替代方法。所以,我搜索了其中的一些,然后我进入了这个 post:http://wezfurlong.org/blog/2006/nov/http-post-from-php-without-curl/。 post 上的函数一开始对我不起作用,但在阅读了几乎所有的评论之后,我做了一点改动,这就是向 [=18] 发出 POST 请求的函数=] 和 returns 图像正确:
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;
}
根据那个 post 评论部分的某人的说法,此方法比 cUrl 慢(而且过程确实很慢),但显然没有其他选择。
我正在尝试使用 Extjs 的功能将图形转换为图像。我不是直接从 javascript 请求 svg.sencha.io,而是尝试在我的 php 代码中使用 cUrl 进行调用。出于某些原因,从 php 调用它是我唯一的选择,使用我现在使用的 cUrl 代码,我总是得到 "Bad request"。所以,我的问题是:附近有没有人处理过这种情况?这是我尝试使用的代码:
$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
包含参数type、width、height和svg。它们看起来还不错,因为我直接从我的机器上运行了 cUrl,它运行正常。所以问题确实出在 cUrl 和 php 上。
var_dump($file);
输出 string(12) "Bad request."
非常感谢您的帮助,我已经被困在这个问题上一段时间了。
我找到了解决方案(至少目前看来是可行的)。
解决方案不是使用 cUrl,而是使用替代方法。所以,我搜索了其中的一些,然后我进入了这个 post:http://wezfurlong.org/blog/2006/nov/http-post-from-php-without-curl/。 post 上的函数一开始对我不起作用,但在阅读了几乎所有的评论之后,我做了一点改动,这就是向 [=18] 发出 POST 请求的函数=] 和 returns 图像正确:
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;
}
根据那个 post 评论部分的某人的说法,此方法比 cUrl 慢(而且过程确实很慢),但显然没有其他选择。