我制作了一个简单的python脚本来访问网页并登录并从中检索数据,它使用urllib / urllib2或mechanize在我的机器上运行。
因此,我想在网站中使用此脚本,以便任何用户都可以在我的网站上填写他的登录凭据,此脚本将获取此数据并填写其他网站。
我使用OpenShift.com作为在线python服务器并尝试了我的脚本,它适用于我尝试过的所有网站(http / https),但是我的目标网站出错了:
urllib2.URLError: <urlopen error [Errno 13] Permission denied>
完整错误:http://pastebin.com/73vTYEvu
所以它在我的运行ubuntu 15.10的机器上工作得很好,这很奇怪但是它在服务器上发出了这个错误,只有我的目标网站,这是一个非常简单的网站(下面脚本中的链接),我认为它是特定于网站的!
我一整天都在寻找这个,我尝试了很多方法,包括https特定的方法,但仍然没有用。
我不介意改变整个方法或服务器,只要它工作:)
我的脚本:(导致错误的部分)
import urllib2
page = urllib2.urlopen('https://uos.sharjah.ac.ae:9050/prod_enUS/twbkwbis.P_WWWLogin')
print page.read()
这通常意味着该网站会阻止刮刀。所以,为了解决这个问题,你必须伪造一个User-Agent字符串并在urllib2构造函数中传递它,如下所示:
req = urllib2.Request('https://uos.sharjah.ac.ae:9050/prod_enUS/twbkwbis.P_WWWLogin', headers={ 'User-Agent': 'Mozilla/5.0' })
html = urllib2.urlopen(req).read()
好像@felipsmartins是对的,这是一个特定于Openshift的问题。
我能够让我的脚本轻松地在Heroku上工作。