我已经使用bottle创建了一个Web服务,并将其用作JSON接口。例程正在收集信息,检查URL的有效性和http_code。
def get_statuscode(url):
c = pycurl.Curl()
c.setopt(pycurl.URL, "http://"+url)
c.setopt(pycurl.SSL_VERIFYPEER, 0)
c.setopt(pycurl.FOLLOWLOCATION, 1)
c.setopt(pycurl.HEADER, 1)
c.setopt(pycurl.NOBODY, 1)
c.setopt(pycurl.FAILONERROR, 1)
#c.setopt(pycurl.E_)
try:
c.perform()
except pycurl.error:
print "MUH"
return None
pass
temp = c.getinfo(pycurl.HTTP_CODE)
c.close()
return temp
如果函数被赋予真正错误的URL,我该如何恢复操作:
例如google.local
我的回溯看起来像这样并停止执行:
In[46]: misc.get_statuscode("google.local")
Traceback (most recent call last):
File "PATH\Python\lib\site-packages\IPython\core\interactiveshell.py", line 3035, in run_code
exec(code_obj, self.user_global_ns, self.user_ns)
File "<ipython-input-46-c47028d49dc0>", line 1, in <module>
misc.get_statuscode("google.local")
File "PATH\ops\misc.py", line 12, in get_statuscode
c.setopt(pycurl.FOLLOWLOCATION, 1)
error: (6, "Couldn't resolve host 'google.local'")
即使尝试了socket.gethostbyname_ex()
但结果相同。
>>> socket.gethostbyname_ex("google.local")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
socket.gaierror: [Errno -2] Name or service not known
答案 0 :(得分:0)
你有return None
除了退出你的功能,通行证也可以删除。将except pycurl.error:
替换为except:
会发现任何错误。
def get_statuscode(url):
c = pycurl.Curl()
c.setopt(pycurl.URL, "http://"+url)
c.setopt(pycurl.SSL_VERIFYPEER, 0)
c.setopt(pycurl.FOLLOWLOCATION, 1)
c.setopt(pycurl.HEADER, 1)
c.setopt(pycurl.NOBODY, 1)
c.setopt(pycurl.FAILONERROR, 1)
#c.setopt(pycurl.E_)
try:
c.perform()
except:
print "MUH"
temp = c.getinfo(pycurl.HTTP_CODE)
c.close()
return temp
答案 1 :(得分:0)
我知道这很古老,但我相信答案就是这个
c.setopt(pycurl.FAILONERROR, 1)
更改为:
c.setopt(pycurl.FAILONERROR, 0)
我使用您的代码对此进行了测试,这只是一个小小的忽视。
问题是当它被设置为1时,它被指示保释错误。
我在FAILONERROR
找到的有关$getlastday = cal_days_in_month(CAL_GREGORIAN, 05, 2018);
$endMonth = date('2018-05-'.$getlastday);
$dayPostition = date('w', strtotime($endMonth));
的更多信息:http://manpages.ubuntu.com/manpages/xenial/man3/tclcurl.3.html#contenttoc7
来自文档:
failonerror 如果HTTP,1参数告诉扩展无提示失败 返回的代码等于或大于400.默认操作 将是正常返回页面,忽略该代码。
此方法不是故障安全的,并且有时候非 成功的响应代码将会漏掉,特别是在 涉及认证(响应代码401和407)。
在此之前,您可能会收到一些转移的标头 检测到情况,就像“100-continue”的情况一样 作为对POST / PUT的响应而收到的是401或407 之后立即收到。