吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2066|回复: 19
收起左侧

[求助] 求助python大神看个代码

[复制链接]
wanwfy 发表于 2019-8-8 14:22
这个是百度推广API的一个示例代码,原来是python2的,有没有大神帮我看看为什么46行会报错,谢谢了
[Python] 纯文本查看 复制代码
import os
import sys
import urllib
import json
import hashlib
import hmac
import time
import datetime
from urllib.parse import quote
from urllib.parse import urlparse

def gen_auth(access_key, secret_key, utc_time_str, url, method):
    url_parse_ret = urlparse(url)
    host = url_parse_ret.hostname
    path = url_parse_ret.path
    version = "1"
    expiration_seconds = "1800"
    signature_headers = "host"

    # 1 Generate SigningKey
    val = "bce-auth-v%s/%s/%s/%s" % (version, access_key, utc_time_str, expiration_seconds)
    signing_key = hmac.new(secret_key, val, hashlib.sha256).hexdigest().encode('utf-8')

    # 2 Generate CanonicalRequest
    # 2.1 Genrate CanonicalURI
    canonical_uri = quote(path)
    # 2.2 Generate CanonicalURI: not used here
    # 2.3 Generate CanonicalHeaders: only include host here
    canonical_headers = "host:%s" % quote(host).strip()
    # 2.4 Generate CanonicalRequest
    canonical_request = "%s\n%s\n\n%s" % (method.upper(), canonical_uri, canonical_headers)

    # 3 Generate Final Signature 
    signature = hmac.new(signing_key, canonical_request, hashlib.sha256).hexdigest()
    authorization = "bce-auth-v%s/%s/%s/%s/%s/%s" % (version, access_key, utc_time_str, expiration_seconds, signature_headers, signature)
    print(authorization)
    return authorization
        
if __name__ == "__main__":
    access_key = "AK"
    secret_key = "SK"
    url = "http://sem.baidubce.com/v1/cloud/PreviewService/getPreview"
    method = "POST"
    utc_time = datetime.datetime.utcnow()
    utc_time_str = utc_time.strftime("%Y-%m-%dT%H:%M:%SZ")
    auth = gen_auth(access_key, secret_key, utc_time_str, url, method)

    header = {
        'accept-encoding':'gzip, deflate',
        'host':'sem.baidubce.com',
        'content-type':'application/json',
        'x-bce-date': utc_time_str,
        'authorization': auth,
        'accept':'*/*'
    }
    data = {"header": {"opUsername": "OPUSERNAME", "opPassword": "OPPASSWORD", "tgUsername": "TGUSERNAME", "tgPassword": "TGPASSWORD"},"body": {"keyWords": ["鲜花"],"device": 1, "region":1000}}
    data = json.dumps(data)
    request = urllib.Request(url, data, header)
    response = None
    try :
        response = urllib.urlopen(request)
        post_res_str = response.read()
        print(post_res_str)
    except urllib2.URLError as e:
        print("URLError")
        print(e.code, e.reason)
        print(e.read())
    except urllib2.HTTPError as e:
        print("HTTPError")
        print(e.code, e.reason)
        print(e.read())


发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

我叫郭靖啊 发表于 2019-8-8 14:29
AK,SK都要换成你自己的
离人心上秋意浓 发表于 2019-8-8 14:33
广州最 发表于 2019-8-8 14:39
 楼主| wanwfy 发表于 2019-8-8 14:46
广州最 发表于 2019-8-8 14:39
建议再贴一张报错的图

报错信息:
TypeError: key: expected bytes or bytearray, but got 'str'


主要是gen_auth函数里面不知道哪里的问题,这个代码本来是python2的,python3可能是什么地方需要改才行。
 楼主| wanwfy 发表于 2019-8-8 14:47
离人心上秋意浓 发表于 2019-8-8 14:33
3楼正解。。。 人家示例代码  内容都没填

NONONO,还没到一步就已经报错了
小屎球 发表于 2019-8-8 14:53
URL我这里访问不了
xw0224 发表于 2019-8-8 14:58
wanwfy 发表于 2019-8-8 14:46
报错信息:

主要是gen_auth函数里面不知道哪里的问题,这个代码本来是python2的,python3可能是什么地 ...

46行的参数必须是字节或者字节素组,不能是字符串
 楼主| wanwfy 发表于 2019-8-8 15:03
小屎球 发表于 2019-8-8 14:53
URL我这里访问不了

你必须访问不了啊,还要加参数
小屎球 发表于 2019-8-8 15:08
wanwfy 发表于 2019-8-8 15:03
你必须访问不了啊,还要加参数

我是说 ping这个域名都没解析出IP
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-27 02:26

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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