LinkedIn媒体上传API报错:请求非多部分请求(400状态码)
解决LinkedIn API上传图片的"非multipart请求"错误
嘿,这个错误我之前踩过坑!LinkedIn的media/upload接口明确要求请求必须是multipart/form-data格式,你当前的curl请求没配置对这个格式,所以才返回400错误。我给你拆解下问题和解决办法:
问题根源
你现在的请求没有以multipart格式发送数据,LinkedIn服务器识别不到正确的请求体结构,直接判定请求无效。另外可能你对接口用法有点误解:这个接口是用来直接上传图片文件内容的,不是上传图片的URL——如果要关联自有服务器的图片,得先把图片内容传上去拿到媒体ID,再在后续的帖子接口里用这个ID。
修正后的代码示例
我给你调整了代码,重点处理multipart请求的配置:
$curl1 = curl_init(); $m_url = "https://api.linkedin.com/media/upload"; // 先从自有服务器获取图片内容(如果是本地文件就直接用路径) $imageContent = file_get_contents($medias[0]); $base64Image = base64_encode($imageContent); $curl_header = array( "Authorization: Bearer " . $access_token ); // 构建multipart请求数据,这里推荐两种方式: // 方式1:用CURLFile(如果图片在本地服务器) // $postFields = array( // 'media' => new CURLFile(realpath('/path/to/your/image.jpg')), // 'name' => 'My Uploaded Image', // 'filename' => 'image.jpg' // ); // 方式2:用base64编码的媒体数据(适合从远程服务器获取内容的情况) $postFields = array( 'media_data' => $base64Image, 'name' => basename($medias[0]), 'filename' => basename($medias[0]) ); // 关键curl配置 curl_setopt($curl1, CURLOPT_URL, $m_url); curl_setopt($curl1, CURLOPT_HTTPHEADER, $curl_header); curl_setopt($curl1, CURLOPT_POST, true); // 传入关联数组时,curl会自动设置multipart/form-data格式,不用手动加Content-Type curl_setopt($curl1, CURLOPT_POSTFIELDS, $postFields); curl_setopt($curl1, CURLOPT_RETURNTRANSFER, true); $response = curl_exec($curl1); $error = curl_error($curl1); curl_close($curl1); if ($error) { echo "CURL Error: " . $error; } else { print_r($response); }
几个关键注意点
- 不要手动设置
Content-Type: multipart/form-data,因为curl会自动生成正确的边界值,手动设置反而容易出错。 - 如果图片在本地,优先用
CURLFile类,这是PHP处理multipart文件上传的标准方式,兼容性更好。 - 上传成功后,你会拿到一个媒体ID,后续创建LinkedIn帖子时,需要在请求体里引用这个ID来关联图片。
内容的提问来源于stack exchange,提问作者Sruthy
相关产品推荐
相关产品推荐

