Php 将卷发转换为鼻涕柱
我正在改编一个将图像上传到imgur的示例。这个例子使用curl,我使用guzzle^6.1。curl的示例如下:Php 将卷发转换为鼻涕柱,php,curl,guzzle,Php,Curl,Guzzle,我正在改编一个将图像上传到imgur的示例。这个例子使用curl,我使用guzzle^6.1。curl的示例如下: <html> <h3>Form</h3> <form method="post" enctype="multipart/form-data"> <input type="hidden" name="MAX_FILE_SIZE" value="50000" /> Image (< 50kb):
<html>
<h3>Form</h3>
<form method="post" enctype="multipart/form-data">
<input type="hidden" name="MAX_FILE_SIZE" value="50000" />
Image (< 50kb): <input type="file" name="upload" /><br/>
ClientID: <input type="text" name="clientid" /><br/>
<input type="submit" value="Upload to Imgur" />
</form>
</html>
<?php
if (empty($_POST['clientid']) || @$_FILES['upload']['error'] !== 0 || @$_FILES['upload']['size'] > 50000) {
exit;
}
$client_id = $_POST['clientid'];
$filetype = explode('/',mime_content_type($_FILES['upload']['tmp_name']));
if ($filetype[0] !== 'image') {
die('Invalid image type');
}
$image = file_get_contents($_FILES['upload']['tmp_name']);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://api.imgur.com/3/image.json');
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_HTTPHEADER, array( 'Authorization: Client-ID ' . $client_id ));
curl_setopt($ch, CURLOPT_POSTFIELDS, array( 'image' => base64_encode($image) ));
$reply = curl_exec($ch);
curl_close($ch);
$reply = json_decode($reply);
echo "<h3>Image</h3>";
printf('<img height="180" src="%s" >', @$reply->data->link);
echo "<h3>API Debug</h3><pre>";
var_dump($reply);
但我收到了400个错误的请求;我的代码有什么问题?乍一看,我发现两个问题:
授权
标题。在Guzzle版本中,您使用Authorization:Client ID
作为标题名和$Client_ID
作为标题值。这将生成一个(错误的)HTTP头,如下所示:
"headers" => [
"authorization" => "Client-ID " . $clientId
]
"form_params" => [
"image" => base64_encode(/* image content here */)
]
解决方案:像这样传递标题:
"headers" => [
"authorization" => "Client-ID " . $clientId
]
"form_params" => [
"image" => base64_encode(/* image content here */)
]
image
参数。该参数包含图像文件的base64编码原始内容。在Guzzle版本中,实际上根本不发送正文,因为您使用的是不存在的图像
选项(查看所有支持选项的列表)。另外,您的原始示例不包含数据:image/png;base64,
前缀(这通常只是对浏览器的提示)
尝试按如下方式传递参数: