2013-08-22 38 views
0

當我在代理之外執行程序時,會運行以下代碼。當我使用Windows 7操作系統在我的工作代理上運行此程序時,我使用Cygwin獲取帶有命令提示符的「[Errno 11004]」或「[Errno 8]」。Python衝突[Errno]消息

這個程序的目標是成爲一個可執行文件,執行人員可以使用它來捕獲我們公司擁有的網站的HTTP響應和URL重定向。

#!/bin/python 
import urllib, urllib2, sys, logging, time 

# Variables 
s = time.strftime('%Y%m%d%H%M%S') 
f = open("list.txt",'r') 

# Logging 
class Logger(object): 
    def __init__(self): 
     self.terminal = sys.stdout 
     self.log = open("assets_"+s+".txt", "a") 

    def write(self, message): 
     self.terminal.write(message) 
     self.log.write(message) 

# Capture logging class 
sys.stdout = Logger() 

# Text file header 
print "ASSET, STATUS, REDIRECT, DATE/TIME" 

# Feed program 16,000 URLs 
for url in f.readlines(): 
    try: 
     http_connection = 'http://' + (url) 
     connection = urllib2.urlopen(http_connection) 
     print (url).rstrip("\n"), ",", connection.getcode(), ",", connection.geturl(), ",", (s) 
     connection.close() 
    except urllib2.URLError as e: 
     print e.reason 
+0

確實[這個問題](http://stackoverflow.com/questions/4847649/opening-websites-using-urllib2-from-behind-corporate-firewall-11004-getaddrinf)幫助? – bbayles

回答

-1

下面是最終的解決方案。找出與代理無關的錯誤。

#!/bin/python 

import urllib2, sys, logging, time, errno, unittest 

# Variables 
s = time.strftime('%Y%m%d%H%M%S') 
f = open("list.txt",'r') 

# Create file text file for importing into database 
class Logger(object): 
    def __init__(self): 
     self.terminal = sys.stdout 
     self.log = open("assets_"+s+".txt", "a") 

    def write(self, message): 
     self.terminal.write(message) 
     self.log.write(message) 

# Start capture of screen output for database file 
sys.stdout = Logger() 
print "UID, ASSET, STATUS, REDIRECT, DATE/TIME" 

# Loop to capture URL status and redirect information 
for assets in f.readlines(): 
    url = assets.split() 
    if len(url) > 1: 
     try: 
      http = 'http://' + url[1]   
      http_connection = urllib2.urlopen(http, timeout=5) 
     except IOError, e: 
      if e.errno == None:   
       try: 
        www = 'http://www.' + url[1] 
        http_connection = urllib2.urlopen(www, timeout=5) 
       except IOError, e: 
        print url[0], ",", url[1].rstrip("\n"), ",", "", ",", e.errno, ",", (s) 
       else: 
        print url[0], ",", url[1].rstrip("\n"), ",", http_connection.getcode(), ",", http_connection.geturl(), ",", (s) 
     else: 
      print url[0], ",", url[1].rstrip("\n"), ",", http_connection.getcode(), ",", http_connection.geturl(), ",", (s) 
0

看起來像一個環境或數據問題。你提到你在代理上運行這個任何限制?努力讓這條線路正常工作。

連接= urllib2.urlopen(HTTP_CONNECTION)