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

查看:122
本文介绍了python - 【求助】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来自:

解决方案

你如果要用 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));

执行结果如下:

这篇关于python - 【求助】PHP下如何使用微博床图的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆