2016-06-05 5 views
0

일부 데이터를 가져 오기 위해 호출해야하는 특정 데이터 API가 있습니다. 그러한 기록이 수백만 개가 있다고 상상해보십시오. 이러한 각 레코드에 대해 레코드 ID 및 API 키에서 데이터 URL (JSON 응답을 반환)을 생성하고 응답을 가져 와서 내 로컬 데이터베이스에 저장합니다. 이제 Mac에서 16GB RAM을 사용하더라도 몇 달이 걸릴 것입니다. 반면 AWS에서 제공하는 64GB 멀티 코어 EC2 데스크탑에서 시도해 보면 문제가 있습니다.Python의 스푸핑 IP 주소

API 서버가 응답 할 수있는 쿼리 수에 속도 제한이 있습니다. 분당 40 초를 넘으면 JSON 응답 대신 오류 메시지가 반환되기 시작합니다. 그리고 EC2 머신에서는 분당 최대 600 건의 요청이 처리됩니다. 올바르게 작동하면 2-3 시간 내에 모든 데이터를 갖게됩니다. 재미있는 점은 API 키가 아닌 IP가 요금 제한을 부과한다는 것입니다. 따라서 요청에 대해 어떻게 든 IP 주소를 스푸핑 할 수 있다면 (라운드 로빈 방식으로 15 개의 IP 목록에서 말하기), 제한 범위 내에서 유지됩니다. 어떻게해야합니까? urllib을 사용하고 있습니다.

url = urltemplate % (list_of_params_including_API_key) 
data = json.load(urllib.urlopen(url)) 
//parse the data and load it into database 
+0

AWS는 실제로 컴퓨터에서 여러 개의 IP를 구성 할 수 있습니까? 파이썬은 문제가 아니며, 네트워크 스택과 업스트림 네트워크는 IP에 대해 알고 있어야 응답이 다시 온다. – Barmar

+0

잘 모르겠다 .. 만약 당신이 뭔가를 알고 싶다면, 나는 그것을 시도 할 것이다. 네트워킹에 관한 나의 지식은 0에 가깝다. – SexyBeast

+0

다음과 같이 할 수있다. https://aws.amazon.com/about -aws/whats-new/2012/07/06/multiple-ip-addresses-for-amazon-ec2-instances-amazon-vpc/ – Barmar

답변

0

네트워크 연결의 소스 주소를 지정 socket.bind 방법을 사용 : 여기 내 예제 코드입니다.

import socket 
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
# bind socket to a particular IP. port 0 allows it to select an unused local port 
s.bind((spoofed_ip, 0)) 
s.connect((server_ip, 80))