【求助】PHP下如何使用微博床图

找到一篇关于微博床图的文章
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来自:
图片描述

阅读 4.8k
3 个回答

你如果要用 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 写)
代码如下:

<?php

$cookie = 'your cookie';
$ch = curl_init('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_array($ch, [
    CURLOPT_POST => true,
    CURLOPT_VERBOSE => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => ["Cookie: $cookie"],
    CURLOPT_POSTFIELDS => ['b64_data' => base64_encode(file_get_contents('./img.jpg'))],
]);

var_export(curl_exec($ch));

执行结果如下:

0068M0TKgy1fclbxmi8ikj30l80lmgra.jpg

这个应该是你调用第三方接口,看官方文档吧

额,楼主我访问您说的这里发现微博现在没用这个接口了


clipboard.png

然后与楼主一样同样感兴趣,想利用利用接口什么的,然后发现了 这个


clipboard.png


clipboard.png

额,没错,裁好了的.. 这样就不知道这图床有什么用了..

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
1 篇内容引用
推荐问题
宣传栏