8

私はいくつかのpythonを学ぼうとしていますが、テストしたいロジックに問題があります。現在、私のコードは、プロセスの開始時に source_address へのバインディングが変更されないように記述されています

import socket
import requests

real_create_conn = socket.create_connection

def set_src_addr(*args):
    address, timeout = args[0], args[1]
    source_address = ('201.X.X.1', 0)
    return real_create_conn(address, timeout, source_address)

socket.create_connection = set_src_addr

r = requests.get('http://www.mywebpage.com/main')
print r.status_code 
if r.status_code == 404
   print "Webpage Down!"

r = requests.get('http://www.mywebpage.com/blog')
print r.status_code 
if r.status_code == 204
   print "Error occured!"

私はどこでこのようなことをしようとしています

import socket
import requests


While 1: 

      #bind to source address 201.X.X.1
      #Send request to main webpage
      #print result
      time.sleep(300) # 5 minutes

      #bind to source address 201.X.X.12
      #Send request to blog webpage
      #print result
      time.sleep(300) # 5 minutes
4

1 に答える 1

18

リクエストごとに洗練された解決策はありませんが、リクエスト セッション オブジェクトを使用し、リクエストごとに新しいトランスポート アダプターをマウントする必要があります。

トランスポート アダプターのコード例は、この問題のコメントrequests-toolbeltにあります。または、パッケージに含まれているアダプターを使用することもできます。

import requests
from requests_toolbelt.adapters import source

responses = []
s = requests.Session()
for source_ip, url in list_of_sources_and_urls:
    new_source = source.SourceAddressAdapter(source_ip)
    s.mount('http://', new_source)
    s.mount('https://', new_source)
    responses.append(s.get(url))

list_of_sources_and_urlsそれはそれが次のように見えることを前提としています

 [('127.0.0.1', 'https://google.com'),
  ('255.255.254.0', 'https://yahoo.com'),
  # ...
  ]
于 2015-02-28T15:53:19.837 に答える