【问题标题】:Connecting to Internet?连接到互联网?
【发布时间】:2017-01-11 17:39:18
【问题描述】:

我在使用 python 连接到 Internet 时遇到问题。

我在使用 PAC 文件设置代理的公司网络上。现在,如果我能找到并解析 PAC 以获得我需要的东西但我不能。

怪事:

R 可以连接到 Internet 以通过 wininet 和 .External(C_download,...) 下载文件,所以我知道这是可能的,当我这样做时:

import ctypes

wininet = ctypes.windll.wininet
flags = ctypes.wintypes.DWORD()
connected = wininet.InternetGetConnectedState(ctypes.byref(flags), None)
print(connected, hex(flags.value))

我得到:1 0x12,所以我有一个可用的连接,但是一旦我尝试使用 wininet 中的其他功能,我就会经常遇到错误功能,例如:

AttributeError: function 'InternetCheckConnection' not found

这几乎适用于 wininet 的任何其他函数,但这并不让我感到惊讶,因为 dir(wininet) 中唯一命名的函数是 InternetGetConnectedState。

wininet 方法显然可以工作,但我不知道如何继续使用它[特别是考虑到我只在工作中使用 Windows]。

【问题讨论】:

  • 据我所知,没有必要将 Python 连接到 Internet,因为 Python 本身并不真正关心这一点。只需确保您的计算机已连接到 Internet,Python 将自动能够使用此连接。
  • 当你说“继续”时,你想做什么?
  • 尝试独立导入模块? from ctypes.windll import wininet from ctypes.wintypes import DWORD 等等..
  • @BillBell 如果我尝试这样做:使用 wininet.InternetOpen('blah') 然后尝试获取我无法获取的页面内容,因为 InternetOpen 不可用。
  • @fūjin,我不知道 PAC 代表什么,但是如果您必须拥有这些东西才能连接到 Internet,但又无法获得它,您认为 Python 会如何帮助您?我认为,您可以直接去找工作中的网络管理员,让他们将您的计算机连接到 Internet。当您无法访问互联网时,就像在您和“外部世界”之间有一堵巨大的坚不可摧的墙,上面有一个小钥匙孔,这样管理员就可以将他们的钥匙插入其中并让您出去。问题是,Python 是一条比较大的蛇,不能从钥匙孔里挤过去 :)

标签: python python-3.x ctypes wininet


【解决方案1】:

“好吧,措辞太糟糕了——让我们把它改成:打开一个到网页的连接并使用 python 获取它的内容”

听起来您实际上需要BeautifulSoupRequests。这是用于浏览网页的快速example

【讨论】:

    【解决方案2】:

    首先,我强烈建议安装requests 模块。在 Python 上不使用 HTTP 执行 HTTP 非常痛苦。

    根据this answer需要从主机wpad下载wpad.dat。那是一个包含代理地址的文本文件。

    知道代理设置后,您可以配置requests 来使用它们:

    import requests
    
    proxies = {
      'http': 'http://10.10.1.10:3128',
      'https': 'http://10.10.1.10:1080',
    }
    
    requests.get('http://example.org', proxies=proxies)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多