我想在Playstation商店查看来自其他国家/地区的电影内容。但是,PlayStation商店会根据请求的位置阻止IP,因此无法从美国查看加拿大的电影:
https://store.playstation.com/#!/en-ca/movies/the-house/cid=UV0130-NPVA92773_CN-0000000000236063
有没有办法做以下事情:
url = 'https://store.playstation.com/#!/en-ca/movies/the-house/cid=UV0130-NPVA92773_CN-0000000000236063'
r = requests.get(url, proxy_from = COUNTRY['CA']) # In pseudocode
基本上,您可以指定一个国家/地区,然后从IP中发送一个可识别来自该国家/地区的请求。怎么做?
答案 0 :(得分:2)
如果我理解正确,你基本上是在询问如何使用代理在python中创建一个url请求?
如果是,你可以这样做:
import urllib2
import urllib
import random
CAproxies = [{"http":"199.201.122.175:3128", "https":"199.201.122.175:3128"},{"http":"192.99.3.129:3128", "https":"192.99.3.129:3128"},{"http":"192.99.246.101:8118", "https":"192.99.246.101:8118"},{"http":"205.205.129.130:443", "https":"205.205.129.130:443"} ]
proxies = urllib2.ProxyHandler(random.choice(CAproxies))
url = 'https://store.playstation.com/#!/en-ca/movies/the-house/cid=UV0130-NPVA92773_CN-0000000000236063'
request = urllib2.Request(url)
request.add_header("User-Agent", "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:25.0) Gecko/20100101 Firefox/25.0")
request.add_header("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8")
opener = urllib2.build_opener(proxies)
urllib2.install_opener(opener)
r = urllib2.urlopen(request, timeout=15)
html = r.read()
如果您希望服务认为您使用的是浏览器,那么标题很好,他们通常会对机器人进行防御。您需要使用自己的代理替换代理地址,这只是一个用于说明目的的发明代理。
例如,可以在此处找到代理列表: http://www.proxy-listen.de/Proxy/Proxyliste.html 如果上面给出的代理不起作用。 如果其中一个代理对您的特定位置更有效(假设第二个代理最适合您,那么将代理的随机选择更改为仅第二个代理可能是个好主意。即
random.choice(CAproxies) -> CAproxies[1]
CAproxies [3]对我来说效果最好。 来自html的前250个字符:
>>> html[0:250]
'<!DOCTYPE html>\n\n<html class="ctry mobvportA rgba">\n <head>\n <meta http-equiv="x-ua-compatible" content="IE=edge" />\n <meta charset="utf-8"/>\n\n <link rel="dns-prefetch" href="//ajax.googleapis.com">\n <link rel="dns-prefetch" href="//ssl.'
答案 1 :(得分:0)
你可以做的只是诊断,并试图弄清楚这是否可行。
您可以做的第一件事是使用VPN
或任何Proxy
模拟您的位置来自加拿大。如果可以,并且您可以加载所需的页面,那么很可能该位置是根据请求IP确定的。
实际上从服务的角度来看,在 Playstation商店的情况下,没有其他可靠的信息可以从中检索客户的地理位置。
因此,如果是这种情况,对您的问题唯一合理的解决方案是以某种方式更改您的IP地址。但无论如何,如果你在应用程序方面这样做,那么将会有太多层,例如路由器,无论如何都会暴露您的真实位置,因为到达服务的最终IP packet
将包含真实的real IP
。
因此,它与您的应用程序或请求客户端无关,您应该考虑放在它前面的内容。
所以如果你的问题是:
如何在应用程序方面实现我的目标?
...然后答案是:很可能没办法:/
但如果你问:
我如何实现目标?
...然后有选项:
proxy
或VPN
。您肯定会找到一个VPN服务,它将为每个位置提供访问凭据(例如OpenVPN config
),因此您可以以编程方式加载它们。这可以在您的应用程序端实现。