找到一篇关于微博床图的文章
http://www.jianshu.com/p/55fd...
具体是用python来实现的
我想要在php下来实现,具体实现代码如下:
$post_data['pic1']=curl_file_create('d:/gg.jpg', 'image/jpeg', "gg.jpg");
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://picupload.service.weibo.com/interface/pic_upload.php?mime=image%2Fjpeg&data=base64&url=0&markpos=1&logo=&nick=0&marks=1&app=miniblog");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
$output = curl_exec($ch);
curl_close($ch);
print_r($output);
但一直失败,不知道为什么?
{"code":"A20001","data":{"count":-1,"data":"eyJhcHAiOiJtaW5pYmxvZyIsImNvdW50IjotMSwidGltZSI6MTQ4NjE5NzM4OC43NjMsInBpY3MiOnsicGljXzEiOnsicmV0IjotMSwibmFtZSI6InBpY18xIn19fQ==","pics":{"pic_1":{"ret":-1,"name":"pic_1"}}}}
1.$cookie内容来自:
2.$post_data['pic1']中的pic1来自:
你如果要用
http://picupload.service.weibo.com/interface/pic_upload.php?mime=image%2Fjpeg&data=base64&url=0&markpos=1&logo=&nick=0&marks=1&app=miniblog
这个 URL 的话POST 参数必须是
b64_data
,值为经过 base64 编码后的字符串如果要使用
pic1
参数的话,则要用multipart
方式进行上传,且 URL 中必须包含cb
参数,cb
参数的值为http://weibo.com/aj/static/upimgback.html?_wv=5&callback=STK_ijax_
加(js)时间戳2种方法相比较的话,我个人倾向于
multipart
方法,因为 base64 编码会使上传文件的体积增加 1/3,不仅上传时间要更久,流量消耗也多了 1/3具体可看 http://js.t.sinajs.cn/t5/home... 或者
用 fiddler 抓包看下 http://weibo.com/minipublish 的上传过程
或者你可以用我造的轮子 PHP实现的微博图床上传轮子,支持 PHP 5.5.9 以上版本
Update
好吧,如果你一定要用 cURL 来实现的话,(我发布到 Github 上那个是因为 symfony/cache 要求 5.5.9 以上版本,所以就直接用更方便的 GuzzleHttp 库了,不然倒是有考虑过用原生 cURL 写)
代码如下:
执行结果如下: