鱼C论坛

 找回密码
 立即注册
查看: 2421|回复: 4

使用墨迹天气的api查询天气出现401: Unauthorized

[复制链接]
发表于 2018-4-27 09:23:20 | 显示全部楼层 |阅读模式
30鱼币
使用了墨迹天气的api想要查询天气,里面给出了请求实例使用python2写的如下:
  1. import urllib, urllib2, sys


  2. host = 'http://freecityid.market.alicloudapi.com'
  3. path = '/whapi/json/alicityweather/briefforecast3days'
  4. method = 'POST'
  5. appcode = '你自己的AppCode'
  6. querys = ''
  7. bodys = {}
  8. url = host + path

  9. bodys['cityId'] = '''2'''
  10. bodys['token'] = '''677282c2f1b3d718152c4e25ed434bc4'''
  11. post_data = urllib.urlencode(bodys)
  12. request = urllib2.Request(url, post_data)
  13. request.add_header('Authorization', 'APPCODE ' + appcode)
  14. //根据API的要求,定义相对应的Content-Type
  15. request.add_header('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8')
  16. response = urllib2.urlopen(request)
  17. content = response.read()
  18. if (content):
  19.     print(content)
复制代码


我把他改成python3的代码如下:
  1. import urllib.parse
  2. import urllib.request

  3. host = 'http://freecityid.market.alicloudapi.com'
  4. path = '/whapi/json/alicityweather/briefforecast3days'
  5. method = 'POST'
  6. appcode = '708efccf6eb5445fae08702f68c5695c'
  7. querys = ''
  8. bodys = {}
  9. url = host+path
  10. bodys['cityId'] = '2'
  11. bodys['token'] = ''
  12. post_data = urllib.parse.urlencode(bodys).encode('utf-8')
  13. request = urllib.request.Request(url, post_data)
  14. request.add_header('Authorization', 'APPCODE' + appcode)
  15. request.add_header('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8')
  16. response = urllib.request.urlopen(request)
  17. content = response.read()
  18. if content:
  19.     print(content)
复制代码


出现了以下错误:
  1. Traceback (most recent call last):
  2.   File "D:/Python/weather/tq.py", line 20, in <module>
  3.     response = urllib.request.urlopen(request)
  4.   File "D:\Python\lib\urllib\request.py", line 222, in urlopen
  5.     return opener.open(url, data, timeout)
  6.   File "D:\Python\lib\urllib\request.py", line 531, in open
  7.     response = meth(req, response)
  8.   File "D:\Python\lib\urllib\request.py", line 641, in http_response
  9.     'http', request, response, code, msg, hdrs)
  10.   File "D:\Python\lib\urllib\request.py", line 569, in error
  11.     return self._call_chain(*args)
  12.   File "D:\Python\lib\urllib\request.py", line 503, in _call_chain
  13.     result = func(*args)
  14.   File "D:\Python\lib\urllib\request.py", line 649, in http_error_default
  15.     raise HTTPError(req.full_url, code, msg, hdrs, fp)
  16. urllib.error.HTTPError: HTTP Error 401: Unauthorized
复制代码

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-4-27 09:29:14 | 显示全部楼层
补充一下,因为token参数介绍里面写的是可选我就没写
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-4-27 11:26:09 | 显示全部楼层
自己顶一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-4-27 11:58:27 | 显示全部楼层
把header加上改成User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36

再看看要不要账号密码登陆,如果需要就把它写到你的程序中。
可以试试cookie登陆
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-4-29 15:14:16 | 显示全部楼层
将token参数加上,第十五行改为如下:
  1. request.add_header('Authorization', 'APPCODE'+' ' + appcode)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-16 15:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表