У меня есть учетные данные для службы WiFi, которая является «открытой» в том смысле, что для того, чтобы связать с ней, пользователю не требуется предоставлять пароль. Существует второй способ аутентификации требуется, чтобы фактически получить доступ к Интернету, а также для того, чтобы сделать это, я должен ввести свои учетные данные через браузер, как показано на экране грейфера ниже:Программно предоставлять вторичные учетные данные WiFi HotSpot с помощью Python в Linux
Поскольку я на Linux, Я бы хотел, чтобы мои полномочия были доступны программным способом с помощью Python. Большинство примеров, которые я видел (например, How to programmatically log into website in Python), желают «имя формы». Я не вижу эту информацию при просмотре «Источник страницы» в браузере, и я не уверен, как правильно отправлять мои учетные данные автоматически. Я был бы очень признателен за помощь в этом! Заранее спасибо.
UPDATE: Вот пример, который я попробовал -
#!/usr/bin/python
import cookielib
import urllib2
import mechanize
# Browser
br = mechanize.Browser()
# Enable cookie support for urllib2
cookiejar = cookielib.LWPCookieJar()
br.set_cookiejar(cookiejar)
# Broser options
br.set_handle_equiv(True)
br.set_handle_gzip(True)
br.set_handle_redirect(True)
br.set_handle_referer(True)
br.set_handle_robots(False)
# ??
br.set_handle_refresh(mechanize._http.HTTPRefreshProcessor(), max_time = 1)
br.addheaders = [ ('User-agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071615 Fedora/3.0.1-1.fc9 Firefox/3.0.1') ]
# authenticate
br.open("http://www.google.com")
br.select_form(name="Authentication Required")
# these two come from the code you posted
# where you would normally put in your username and password
br[ "USERID" ] = my_user
br[ "PASSWDTXT" ] = my_pass
res = br.submit()
print "Success!\n"
Проблема заключается в том, что я просто получаю эту ошибку:
Traceback (most recent call last):
File "./login.py", line 29, in <module>
br.open("http://www.google.com")
File "/usr/local/lib/python2.7/dist-packages/mechanize/_mechanize.py", line 203, in open
return self._mech_open(url, data, timeout=timeout)
File "/usr/local/lib/python2.7/dist-packages/mechanize/_mechanize.py", line 255, in _mech_open
raise response
mechanize._response.httperror_seek_wrapper: HTTP Error 401: Unauthorized
UPDATE 2: Я также попытался это:
#!/usr/bin/python
import urllib2
username = my_user
password = my_pass
proxy = urllib2.ProxyHandler({'http': 'http://%s:%[email protected]'%(username,password)})
auth = urllib2.HTTPBasicAuthHandler()
opener = urllib2.build_opener(proxy, auth, urllib2.HTTPHandler)
urllib2.install_opener(opener)
conn = urllib2.urlopen('http://google.com')
return_str = conn.read()
Новая ошибка:
Traceback (most recent call last):
File "./login.py", line 13, in <module>
conn = urllib2.urlopen('http://python.org')
File "/usr/lib/python2.7/urllib2.py", line 127, in urlopen
return _opener.open(url, data, timeout)
File "/usr/lib/python2.7/urllib2.py", line 410, in open
response = meth(req, response)
File "/usr/lib/python2.7/urllib2.py", line 523, in http_response
'http', request, response, code, msg, hdrs)
File "/usr/lib/python2.7/urllib2.py", line 448, in error
return self._call_chain(*args)
File "/usr/lib/python2.7/urllib2.py", line 382, in _call_chain
result = func(*args)
File "/usr/lib/python2.7/urllib2.py", line 531, in http_error_default
raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
urllib2.HTTPError: HTTP Error 401: Unauthorized