Google Closure 编译器和 multipart/form-data 不起作用
我正在向 google 闭包编译器 API 服务发出请求:
$content = file_get_contents('file.js');
$url = 'http://closure-compiler.appspot.com/compile';
$post = true;
$postData = array('output_info' => 'compiled_code', 'output_format' => 'text', 'compilation_level' => 'SIMPLE_OPTIMIZATIONS', 'js_code' => urlencode($content)));
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
if ($post) {
curl_setopt($ch, CURLOPT_POST, $post);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
}
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/x-www-form-urlencoded; charset=UTF-8'));
但是请求失败,我从 google 收到此错误消息:
Error(18): Unknown parameter in Http request: '------------------------------0f1f2f05fb97
Content-Disposition: form-data; name'.
Error(13): No output information to produce, yet compilation was requested.
我查看了标头,并且正在发送此 Content-Type 标头:
application/x-www-form-urlencoded; charset=UTF-8; boundary=----------------------------0f1f2f05fb97
不确定添加的边界是否是普通的?由于谷歌似乎不喜欢它,我该如何防止这种情况?
谢谢你, 韦斯利
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您必须使用
http_build_query()
< /a> 在将 POST 数据(数组)发送到 cURL 之前。所以你的
$postData
应该是这样的:You have to use
http_build_query()
prior to sending POST data (array) to cURL.So your
$postData
should look like this:看起来 Google 的 API 不支持 multipart/form-data 数据。这对我来说似乎有点蹩脚......
根据关于curl_setopt()的PHP文档:
因此,如果将代码的第 4 行更改为如下所示,它应该可以工作:
换句话说,您必须自己进行 URL 编码 - 显然您不能依赖 cURL 来获取数组并为您进行编码。
Looks like Google's API doesn't support multipart/form-data data. Which seems a bit lame to me...
According to the PHP documentation on curl_setopt():
So it should work if you change the 4th line of your code to something like this:
In other words, you have to do the URL encoding yourself - you apparently can't rely on cURL to take an array and encode it for you.
1.) 不要使用 array() 以避免切换到 multipart/form-data:
2.)不要使用http_build_query()来避免双重编码问题(@Wesley)。此外,您不能两次使用密钥(我知道这个解决方法,但它很难看)。
我使用 http_build_query() 时出现的一些错误消息:
3 之前。)我的建议:
1.) Don't use an array() to avoid switch to multipart/form-data:
2.) Don't use http_build_query() to avoid double encoding problems (@Wesley). In addition you aren't able to use keys twice (I know this workaround, but its ugly).
Some of my error messages by using http_build_query():
3.) My proposal: