微博是个好图床,上传后就可以通过一个url来访问了。今天就用php来上传图片到微博,这也是来自sf的一个问题, 里面还提到一个python版本.

有2种方式实现上传图片:

如果要用 http://picupload.service.weib... 这个 URL 的话POST 参数必须是 b64_data,值为经过 base64 编码后的字符串。

如果要使用 pic1 参数的话,则要用 multipart 方式进行上传,且 URL 中必须包含 cb 参数,cb 参数的值为 http://weibo.com/aj/static/up... 加(js)时间戳

以下为php实现,感谢这个问题下@consatan 的回复,这里做个总结。

使用base64上传

$cookie = 'your cookie';//登录微博network获取

$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('./sf.jpg'))],

]);

$res = curl_exec($ch);

curl_close($ch);

print_r($res);

/*

{"code":"A00006","data":{"count":1,"data":"eyJ1aWQiOjMyNDMwMjYyMzcsImFwcCI6Im1pbmlibG9nIiwiY291bnQiOjEsInRpbWUiOjE0ODc3NDIyMDYuMzIxLCJwaWNzIjp7InBpY18xIjp7IndpZHRoIjo1MTAsInNpemUiOjUyOTMzLCJyZXQiOjEsImhlaWdodCI6MzMwLCJuYW1lIjoicGljXzEiLCJwaWQiOiJjMTRjYTczZGx5MWZjejcxejNyN25qMjBlNjA5NnE1ZiJ9fX0=","pics":{"pic_1":{"width":510,"size":52933,"ret":1,"height":330,"name":"pic_1","pid":"c14ca73dly1fcz71z3r7nj20e6096q5f"}}}}

$data=base64_decode($res['data']['data'])

{"uid":3243026237,"app":"miniblog","count":1,"time":1487742206.321,"pics":{"pic_1":{"width":510,"size":52933,"ret":1,"height":330,"name":"pic_1","pid":"c14ca73dly1fcz71z3r7nj20e6096q5f"}}}

*/

//c14ca73dly1fcz71z3r7nj20e6096q5f就是微博图片id,访问http://ww3.sinaimg.cn/large/c14ca73dly1fcz39h7mo3j20e6096q5f即可打开图片,这里我上传的是sf的广告图。

multipart 方式上传

$cookie = 'your cookie';//登录微博network获取

$post_data['pic1']=new CURLFile(realpath('sf.jpg'));

$time=substr(strval(microtime(true) * 1000), 0, 13) . 1;

$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&cb=http://weibo.com/aj/static/upimgback.html?_wv=5&callback=STK_ijax_".time();

$ch = curl_init($url);

curl_setopt($ch, CURLOPT_COOKIE, $cookie);

curl_setopt($ch, CURLOPT_POST, 1);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

//multipart 方式上传需要注意传递的参数是数组,不是字符串

curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);

//curl_setopt($ch, CURLOPT_HEADER, 1);

// curl_setopt($ch, CURLOPT_NOBODY, 0);

$output = curl_exec($ch);

$rinfo=curl_getinfo($ch);

print_r($output);

curl_close($ch);

/*

{"code":"A20001","data":{"count":2,"data":"eyJ1aWQiOjMyNDMwMjYyMzcsImFwcCI6Im1pbmlibG9nIiwiY291bnQiOjIsInRpbWUiOjE0ODc3MzQzMzUuNDU3LCJwaWNzIjp7InBpY18yIjp7InJldCI6LTIsIm5hbWUiOiJwaWNfMiJ9LCJwaWNfMSI6eyJ3aWR0aCI6NTEwLCJzaXplIjo1MjkzMywicmV0IjoxLCJoZWlnaHQiOjMzMCwibmFtZSI6InBpY18xIiwicGlkIjoiYzE0Y2E3M2RseTFmY3ozOWg3bW8zajIwZTYwOTZxNWYifX19","pics":{"pic_2":{"ret":-2,"name":"pic_2"},"pic_1":{"width":510,"size":52933,"ret":1,"height":330,"name":"pic_1","pid":"c14ca73dly1fcz39h7mo3j20e6096q5f"}}}}

*/

//从结果中获取pid即可,这里发现上传同一张图片返回的pid是相同的,看来微博有处理,也许是比较文件的md5.

这里需要注意php不同版本上传图片的处理,参考这个链接 ,传统上,PHP的cURL支持通过在数组数据中,使用“@+文件全路径”的语法附加文件,供cURL读取上传,但PHP从5.5开始引入了新的CURLFile类用来指向文件,所以做个处理:

if (class_exists('\CURLFile')) {

$field = array('fieldname' => new \CURLFile(realpath($filepath)));

} else {

$field = array('fieldname' => '@' . realpath($filepath));

}

java上传微博图床_php上传图片到微博图床相关推荐

  1. java微信上传本地视频教程_java微信开发之上传下载多媒体文件,java上传下载_PHP教程...

    java微信开发之上传下载多媒体文件,java上传下载 回复图片.音频.视频消息都是需要media_id的,这个是需要将多媒体文件上传到微信服务器才有的. 将多媒体文件上传到微信服务器,以及从微信服务 ...

  2. java 上传文件注意事项

    java 上传文件注意事项 1.文件名有特殊字符的情况,所以最好是文件名前台url编码,后台再url解码,这点在下载的时候也一样 2.文件大小一定要设置,spring boot 有默认. 3.文件名校 ...

  3. JAVA上传文件图片到服务器保存

    这里我记录一个比较简单方便操作的JAVA上传文件图片到服务器并且保存! 首先是页面 html的   我这是提交一个文件和类型 <div style="border: 1px solid ...

  4. java上传文件图片到服务器保存,Java上传文件图片到服务器的方法

    这里我记录一个比较简单方便操作的java上传文件图片到服务器并且保存,具体内容如下 首先是页面html的   我这是提交一个文件和类型 我是添加一张临时图片得到微信的media_id保存数据库! en ...

  5. java上传文件到项目路径

    图片目录 前端代码 <!DOCTYPE html> <html lang="zh-cn"> <head><meta charset=&qu ...

  6. kindeditor扩展粘贴截图功能修改图片上传路径并通过webapi上传图片到图片服务器...

    2019独角兽企业重金招聘Python工程师标准>>> kindeditor是一个非常好用的富文本编辑器,它的简单使用我就不再介绍了. 而kindeditor却对图片的处理不够理想. ...

  7. java上传视频代码下载_java 实现视频上传

    [实例简介] java上传视频转码播放的一个demo,实现java上传视频.转码.截图和播放功能 [实例截图] [核心代码] java视频上传,转码,播放实现 └── java视频上传,转码,播放实现 ...

  8. java上传文件功能_Java MemoryMapped文件的功能

    java上传文件功能 Java MemoryMapped文件的功能 在JDK 1.4中,内存映射文件的一个有趣功能被添加到Java中,该功能允许将任何文件映射到OS内存以进行有效读取. 内存映射文件可 ...

  9. java 上传文件到服务器_java上传文件到OSS云服务器(二)

    上篇文章中已经把接口端和service业务层写了,这次就把OSS上传文件的工具类补上. 一.首先配置好OSS服务器各项节点,这是在springboot中appliaction.yml配置文件中的写法. ...

最新文章

  1. detector = dlib.get_frontal_face_detector()获取人脸框的用法
  2. 新冠图像数据分析论文集合(附链接)
  3. memset,memcpy,strcpy 的区别
  4. 单播、广播、组播、多播
  5. 对Hibernate使用之愚见
  6. 进程控制块包含的信息
  7. Flowable通过api查询流程返回流程图节点
  8. hadoop集群之HDFS和YARN启动和停止命令
  9. 安卓获取mysql数据封装方法_android SQLite数据库封装
  10. 二维分类教案_二维分类大班教案
  11. linux 中kafka发送数据,C++ 向kafka中发送数据
  12. ant vue 树形菜单横向显示_丝滑般 Vue 拖拽排序树形表格组件Vue-DragTreeTable
  13. (笔试题)被3和5整除的数的和
  14. EGS5在linux系统下安装过程
  15. wordprss只显示一个当前主题 问题的解决
  16. 上海电信光猫SA1456C桥接后4K IPTV继续使用
  17. 荣耀4a鸿蒙,华为荣耀4A上手评测:599元也可以很拉轰
  18. ping ping ping HDU - 6203
  19. 内外兼修:Oracle ACED熊军谈Oracle学习
  20. jvm-8-java

热门文章

  1. 国风·召南·野有死麕
  2. mysql几条相同的数据删除只留一条id最大的数据
  3. 泰拉瑞亚自建服务器,泰拉瑞亚1.4版本服务器创建教程
  4. 由于找不到C:\InetPub\ftproot\Tipray\Ldterm\ghijt32.DLL,无法继续执行代码。重新安装程序可能会解决此问题。
  5. Springboot集合POI导出多sheet的Excel表格
  6. 关于买鸡的问题,5文钱可以买一只公鸡,3文钱可以买一只母鸡,1文钱可以买3只雏鸡.现在用100文钱买100只鸡,那么各有公鸡、母鸡、雏鸡多少只?
  7. nginx: [warn] conflicting server name “xxx“ on 0.0.0.0:80解决
  8. C++小游戏《末日之战1:新生》1.12.31823.132
  9. 基于java的健身房会员卡管理系统ssh框架
  10. java中打印大小写字母