python - 【求助】PHP下如何使用微博床图
PHP中文网
PHP中文网 2017-04-11 09:44:36
[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来自:

PHP中文网
PHP中文网

认证0级讲师

全部回复(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));

执行结果如下:

阿神

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

PHPz

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


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



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

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号