NH4L 2018-11-15 11:54 采纳率: 0%
浏览 1663

python获取微博接口发微博出现403禁止访问的情况

利用微博的开放的接口,加上大佬的weibo sdk包,最后使用post.statuses update方法
来提交post请求,从而发一条微博。使用它的get方法的时候都没有问题的,但是一使用它的post中的请求的时候就会出问题:

 urllib.error.HTTPError: HTTP Error 403: Forbidden

下面是我整个的代码:

from weibo import APIClient
import urllib.request
import urllib.parse

def weibo():
    APP_KEY = '528248027'
    APP_SECRET = '4dfcbaf24dc2341d41aea5b462ac61f6'
    CALLBACK_URL = 'https://api.weibo.com/oauth2/default.html'
    OAUTH_URL = 'https://api.weibo.com/oauth2/default.html'
    USER_ID = '6270069375'
    PASSWORD = '19981027lcy'
    client = APIClient(app_key=APP_KEY, app_secret=APP_SECRET, redirect_uri=CALLBACK_URL)
    refer_url = client.get_authorize_url()
    print("refer_url is :", refer_url)
    cookies = urllib.request.HTTPCookieProcessor()
    opener = urllib.request.build_opener(cookies)
    urllib.request.install_opener(opener)
    postdata = {
        'client_id': APP_KEY,
        'redirect_uri': CALLBACK_URL,
        'userId': USER_ID,
        'passwd': PASSWORD,
        'isLoginSina': "1",
        'action': 'submit',
        'response_type': 'code'
    }
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36',
        'Host': 'open.weibo.com',
        'Referer': refer_url
    }
    req = urllib.request.Request(
        url=OAUTH_URL,
        data=urllib.parse.urlencode(postdata).encode(encoding='UTF8'),
        headers=headers,
    )

    resp = urllib.request.urlopen(req)
    print('callback url is :', resp.geturl())
    pat = 'code=(.*?)$'
    print(resp.geturl())
    code = input('input code:')
    print('code is :', code)

    r = client.request_access_token(code, redirect_uri=CALLBACK_URL)
    access_token1 = r.access_token
    expires_in = r.expires_in

    print('access_token=', access_token1)
    print('expires_in=', expires_in)
    #client.set_access_token(access_token1, expires_in)
    return client, access_token1, refer_url, expires_in

def main():
    client, access_token, refer_url, expires_in = weibo()
    client.set_access_token(access_token=access_token, expires_in=expires_in)#已经设置的授权,所有的get方法都是行得通的,就是不能提交post请求
    print('用户id:', client.get.account__get_uid())
    result5 = client.post.statuses__update(source='528248027', status='写一个小微博', geo_enabled=True)#发一条微博

    print(result5)



if __name__ == '__main__':
    main()

这个要是放在爬虫里面,就是需要加一些headers就可以解决了,但是在这里面,我已经获得授权了,就是已经设置过了client的access_token:

 client.set_access_token(access_token=access_token, expires_in=expires_in)
  • 写回答

1条回答 默认 最新

  • lyhsdy 2018-11-16 02:37
    关注

    首先查看自己账号权限和频次是否有问题,也可以通过邮件weibo_api_tech@sina.com反馈到技术那边帮你排查

    评论

报告相同问题?

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器