我需要使用SSL协议嵌入Instagram视频或照片,因此我可以在Facebook应用中显示它。
如果我插入带有以下网址https://instagram.com/p/hvisAyBQZ0/embed/的iframe,则会在http中加载所有资源,但不会加载https。
UPDATE:
This is the HTTPS Response, it's a 302 response.
Connection: keep-alive
Content-Length: 154
Content-Type: text/html
Date: Tue, 10 Dec 2013 15:58:20 GMT
Location: http://instagram.com/p/hvisAyBQZ0/embed/
Server: nginx
答案 0 :(得分:1)
不幸的是,Instagram不支持传统<iframe>
嵌入的HTTPS。他们所做的只是在你发现自己的时候重定向到http。
或者,您可以使用<img>
标记嵌入图片。这些图片可以通过HTTPS提供,并附有有效的SSL证书。
示例:
<img src="//instagram.com/p/hvisAyBQZ0/media/?size=t" alt="Thumbnail (150x150)">
<img src="//instagram.com/p/hvisAyBQZ0/media/?size=m" alt="Medium (305x306)">
<img src="//instagram.com/p/hvisAyBQZ0/media/?size=l" alt="Large (640x640)">
所有这些网址实际上都是重定向,但目标网址似乎支持HTTPS,尽管official documentation中未提及。
这当然不是常规嵌入的令人满意的替代品,因为Instagram视频不能像这样(仅预览图像)。但也许对某些人来说,这比没有好。
答案 1 :(得分:0)
为此,您需要实现Instagram的Developer API。
您会注意到所有终结点都可通过https
获得,特别是......
https://api.instagram.com/v1/media/3?access_token=[redacted]
...将检索特定的照片或视频。
答案 2 :(得分:0)
根据Mike Krieger的this old Google Groups post,您可以通过API获取网址,然后使用distillery.s3.amazonaws.com
替换网址的开头。
例如:http://images.ak.instagram.com/profiles/profile_539562_75sq_1386973442.jpg
可以成为//distillery.s3.amazonaws.com/profiles/profile_539562_75sq_1386973442.jpg
,可以在https上正常工作。
看来Instagram现在使用各种CDN,所以你必须对重写规则更聪明。这是我的代码
def sslify_instagram_cdn_url(url):
"""Intercept IG CDN urls and serve using a SSL-friendly CDN instead"""
replace_prefixes = (
('^http://images.ak.instagram.com(.*)$', '//distillery.s3.amazonaws.com%s'),
('^http://distilleryimage([0-9]*).ak.instagram.com(.*)$', '//distilleryimage%s.s3.amazonaws.com%s'),
('^http://origincache-([a-z]*).fbcdn.net(.*)$', '//origincache-%s.fbcdn.net%s'),
('^http://distilleryimage([0-9]*).s3.amazonaws.com(.*)$', '//distilleryimage%s.s3.amazonaws.com%s'),
('^http://scontent-([a-z]).cdninstagram.com(.*)$', '//scontent-%s.cdninstagram.com%s'),
('^http://photos-[a-z].ak.instagram.com/hphotos-ak-[0-9a-z]{3,4}/(.*)$', '//origincache-frc.fbcdn.net/%s'),
)
for prefix, replacement in replace_prefixes:
results = re.findall(prefix, url)
if not results:
continue
return replacement % results[0]
return url
请注意,如果Instagram更改了CDN设置,这可能会中断。但它现在是一个可行的黑客。
答案 3 :(得分:0)
EFF在他们的HTTPS Everywhere Atlas中拥有Instagram cdn重写规则的优秀资源:https://www.eff.org/https-everywhere/atlas/domains/instagram.com.html
使用这些可以创建一个更健壮的系统来生成Instagram https图像链接。