连接到互联网?

Posted

技术标签:

【中文标题】连接到互联网?【英文标题】: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 是一条比较大的蛇,不能从钥匙孔里挤过去 :) 【参考方案1】:

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

听起来您实际上需要BeautifulSoup 和Requests。这是用于浏览网页的快速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)

【讨论】:

以上是关于连接到互联网?的主要内容,如果未能解决你的问题,请参考以下文章

检测用户是不是连接到互联网?

Android 模拟器无法连接到互联网

使用 NEHotspotConfigurationManager 连接到没有互联网的 wifi

如何将安卓模拟器连接到互联网

检查可执行文件是不是可以尝试连接到互联网

检查是不是连接到 WiFi(即使没有互联网)或移动数据