奇怪的urllib2.urlopen()错误与变量vs字符串

时间:2013-07-23 04:26:05

标签: python urllib2

使用urllib2打开网址并下载视频时,我有一些奇怪的行为。

我正在尝试打开视频资源,这是一个示例链接:

https://zencoder-temp-storage-us-east-1.s3.amazonaws.com/o/20130723/b3ed92cc582885e27cb5c8d8b51b9956/b740dc57c2a44ea2dc2d940d93d772e2.mp4?AWSAccessKeyId=AKIAI456JQ76GBU7FECA&Signature=S3lvi9n9kHbarCw%2FUKOknfpkkkY%3D&Expires=1374639361

我有以下代码:

        mp4_url = ''
        #response_body is a json response that I get the mp4_url from
        if response_body['outputs'][0]['label'] == 'mp4':
            mp4_url = response_body['outputs'][0]['url']

        if mp4_url:
            logging.info('this is the mp4_url')
            logging.info(mp4_url)

            #if I add the line directly below this then it works just fine
            mp4_url = 'https://zencoder-temp-storage-us-east-1.s3.amazonaws.com/o/20130723/b3ed92cc582885e27cb5c8d8b51b9956/b740dc57c2a44ea2dc2d940d93d772e2.mp4?AWSAccessKeyId=AKIAI456JQ76GBU7FECA&Signature=S3lvi9n9kHbarCw%2FUKOknfpkkkY%3D&Expires=1374639361'

            mp4_video = urllib2.urlopen(mp4_url)
            logging.info('succesfully opened the url')

当我添加指定的行时,代码可以工作,但它给了我一个HTTP错误403:禁止消息,当我不这样做时,我认为它会以某种方式弄乱mp4_url。但令人困惑的是,当我检查mp4_url的日志行时,它正是我在那里硬编码的。有什么区别?那里有一些人物可能会破坏它吗?我尝试通过执行以下操作将其转换为字符串:

mp4_video = urllib2.urlopen(str(mp4_url))

但那没有做任何事情。有什么想法吗?

更新:

建议使用print repr(mp4_url),它给了我:

u'https://zencoder-temp-storage-us-east-1.s3.amazonaws.com/o/20130723/b3ed92cc582885e27cb5c8d8b51b9956/b740dc57c2a44ea2dc2d940d93d772e2.mp4?AWSAccessKeyId=AKIAI456JQ76GBU7FECA&Signature=S3lvi9n9kHbarCw%2FUKOknfpkkkY%3D&Expires=1374639361'

我认为不同之处在于导致错误的原因,但解析错误的最佳方法是什么?

更新II:

最终我确实需要将它转换为字符串,但是我获得链接的源(编码视频)需要将近60秒的延迟才能提供该URL,这就是为什么它继续工作当我硬编码它因为它有延迟。谢谢你的帮助!

1 个答案:

答案 0 :(得分:1)

最好简单地转储获得的响应。通过这种方式,您可以检查response_body ['outputs'] [0] ['label']的评估结果。在您的情况下,您正在将mp4_url初始化为''。这与None不同,因此条件if mp4_url:将始终为真。

您可能需要检查最初的 if 语句,其中您检查了response_body ['outputs'] [0] ['label']是否正确。