来自不同国家 IP 的请求
Request from different Country IP
我想在 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 发送请求,该 IP 将被识别为来自该国家/地区。这将如何完成?
您可以做的就是诊断并尝试弄清楚这是否可行。
您可以做的第一件事是使用 VPN
或任何 Proxy
模拟您来自加拿大的位置。如果可行,并且您能够加载所需的页面,那么很可能该位置是根据请求 IP 确定的。
实际上从服务的角度来看,在您的情况下 Playstation 商店,没有其他可靠的信息可以从中检索客户的地理位置。
因此,如果是这种情况,唯一合理的解决方案就是以某种方式更改您的 IP 地址。但无论如何,如果你在你的应用程序端这样做,就会有太多层,例如路由器,无论如何都会暴露您的真实位置,因为到达服务的最终 IP packet
将包含真实的 real IP
.
所以,跟你的应用程序或请求客户端没有关系,你应该考虑在它前面放什么。
所以如果你的问题是:
How to achieve my goal on the application side?
...那么答案是:很可能没有办法 :/
但是如果你问:
How can I achieve my goal?
...然后有选项:
- 使用
proxy
或VPN
。您肯定会找到一个 VPN 服务,它将为每个位置提供访问凭据(例如 OpenVPN config
),因此您可以以编程方式加载它们。这可以在您的应用程序端实现。
- 而鲁莽的人...在您要请求的每个位置都有机器:)
如果我没理解错的话,您基本上是在问如何使用代理在 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()
如果您希望服务认为您正在使用浏览器,headers 就很好,它们通常可以防御机器人程序。您需要将代理地址替换为您自己的代理,这只是为了说明目的而发明的代理。
可以在此处找到代理列表,例如:
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.'
我想在 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 发送请求,该 IP 将被识别为来自该国家/地区。这将如何完成?
您可以做的就是诊断并尝试弄清楚这是否可行。
您可以做的第一件事是使用 VPN
或任何 Proxy
模拟您来自加拿大的位置。如果可行,并且您能够加载所需的页面,那么很可能该位置是根据请求 IP 确定的。
实际上从服务的角度来看,在您的情况下 Playstation 商店,没有其他可靠的信息可以从中检索客户的地理位置。
因此,如果是这种情况,唯一合理的解决方案就是以某种方式更改您的 IP 地址。但无论如何,如果你在你的应用程序端这样做,就会有太多层,例如路由器,无论如何都会暴露您的真实位置,因为到达服务的最终 IP packet
将包含真实的 real IP
.
所以,跟你的应用程序或请求客户端没有关系,你应该考虑在它前面放什么。
所以如果你的问题是:
How to achieve my goal on the application side?
...那么答案是:很可能没有办法 :/
但是如果你问:
How can I achieve my goal?
...然后有选项:
- 使用
proxy
或VPN
。您肯定会找到一个 VPN 服务,它将为每个位置提供访问凭据(例如OpenVPN config
),因此您可以以编程方式加载它们。这可以在您的应用程序端实现。 - 而鲁莽的人...在您要请求的每个位置都有机器:)
如果我没理解错的话,您基本上是在问如何使用代理在 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()
如果您希望服务认为您正在使用浏览器,headers 就很好,它们通常可以防御机器人程序。您需要将代理地址替换为您自己的代理,这只是为了说明目的而发明的代理。
可以在此处找到代理列表,例如: 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.'