當前位置:首頁 » 編程語言 » pythonurlliberror

pythonurlliberror

發布時間: 2022-10-01 06:49:52

python urllib2: HTTP 400 error

你好:
請問你確定是:{"result":200,"sentence_link_id":28114393,"slang":true,"sentence_teach_uid":0,"msg":"OK","sentence_resp":"好久不見","emotion":null}

我在瀏覽器裡面輸入地址,結果是:
{"result":400,"msg":"Failed to convert value of type 'java.lang.String' to required type 'long'; nested exception is java.lang.NumberFormatException: For input string: \"\""}

⑵ 關於python 的 urllib , 報[Errno socket error] [Errno 10061] 錯誤

表示該代碼我可以運行啊.

你這個例子完全可以換個地址實驗,換個地址試試

⑶ pythonrpc中伺服器urlerror能拋出異常么

1.URLError

首先解釋下URLError可能產生的原因:

網路無連接,即本機無法上網
連接不到特定的伺服器
伺服器不存在

在代碼中,我們需要用try-except語句來包圍並捕獲相應的異常。下面是一個例子,先感受下它的風騷

import urllib2

requset = urllib2.Request('http://www.xxxxx.com')
try:
urllib2.urlopen(requset)
except urllib2.URLError, e:
print e.reason

我們利用了 urlopen方法訪問了一個不存在的網址,運行結果如下:

[Errno 11004] getaddrinfo failed

它說明了錯誤代號是11004,錯誤原因是 getaddrinfo failed

2.HTTPError

HTTPError是URLError的子類,在你利用urlopen方法發出一個請求時,伺服器上都會對應一個應答對象response,其中它包含一個數字」狀態碼」。舉個例子,假如response是一個」重定向」,需定位到別的地址獲取文檔,urllib2將對此進行處理。

其他不能處理的,urlopen會產生一個HTTPError,對應相應的狀態嗎,HTTP狀態碼表示HTTP協議所返回的響應的狀態。下面將狀態碼歸結如下:

100:繼續 客戶端應當繼續發送請求。客戶端應當繼續發送請求的剩餘部分,或者如果請求已經完成,忽略這個響應。
101: 轉換協議 在發送完這個響應最後的空行後,伺服器將會切換到在Upgrade 消息頭中定義的那些協議。只有在切換新的協議更有好處的時候才應該採取類似措施。
102:繼續處理 由WebDAV(RFC 2518)擴展的狀態碼,代表處理將被繼續執行。
200:請求成功 處理方式:獲得響應的內容,進行處理
201:請求完成,結果是創建了新資源。新創建資源的URI可在響應的實體中得到 處理方式:爬蟲中不會遇到
202:請求被接受,但處理尚未完成 處理方式:阻塞等待
204:伺服器端已經實現了請求,但是沒有返回新的信 息。如果客戶是用戶代理,則無須為此更新自身的文檔視圖。 處理方式:丟棄
300:該狀態碼不被HTTP/1.0的應用程序直接使用, 只是作為3XX類型回應的默認解釋。存在多個可用的被請求資源。 處理方式:若程序中能夠處理,則進行進一步處理,如果程序中不能處理,則丟棄
301:請求到的資源都會分配一個永久的URL,這樣就可以在將來通過該URL來訪問此資源 處理方式:重定向到分配的URL
302:請求到的資源在一個不同的URL處臨時保存 處理方式:重定向到臨時的URL
304:請求的資源未更新 處理方式:丟棄
400:非法請求 處理方式:丟棄
401:未授權 處理方式:丟棄
403:禁止 處理方式:丟棄
404:沒有找到 處理方式:丟棄
500:伺服器內部錯誤 伺服器遇到了一個未曾預料的狀況,導致了它無法完成對請求的處理。一般來說,這個問題都會在伺服器端的源代碼出現錯誤時出現。
501:伺服器無法識別 伺服器不支持當前請求所需要的某個功能。當伺服器無法識別請求的方法,並且無法支持其對任何資源的請求。
502:錯誤網關 作為網關或者代理工作的伺服器嘗試執行請求時,從上游伺服器接收到無效的響應。
503:服務出錯 由於臨時的伺服器維護或者過載,伺服器當前無法處理請求。這個狀況是臨時的,並且將在一段時間以後恢復。

HTTPError實例產生後會有一個code屬性,這就是是伺服器發送的相關錯誤號。
因為urllib2可以為你處理重定向,也就是3開頭的代號可以被處理,並且100-299范圍的號碼指示成功,所以你只能看到400-599的錯誤號碼。

下面我們寫一個例子來感受一下,捕獲的異常是HTTPError,它會帶有一個code屬性,就是錯誤代號,另外我們又列印了reason屬性,這是它的父類URLError的屬性。

import urllib2

req = urllib2.Request('http://blog.csdn.net/cqcre')
try:
urllib2.urlopen(req)
except urllib2.HTTPError, e:
print e.code
print e.reason

運行結果如下

403
Forbidden

錯誤代號是403,錯誤原因是Forbidden,說明伺服器禁止訪問。

我們知道,HTTPError的父類是URLError,根據編程經驗,父類的異常應當寫到子類異常的後面,如果子類捕獲不到,那麼可以捕獲父類的異常,所以上述的代碼可以這么改寫

import urllib2

req = urllib2.Request('http://blog.csdn.net/cqcre')
try:
urllib2.urlopen(req)
except urllib2.HTTPError, e:
print e.code
except urllib2.URLError, e:
print e.reason
else:
print "OK"

如果捕獲到了HTTPError,則輸出code,不會再處理URLError異常。如果發生的不是HTTPError,則會去捕獲URLError異常,輸出錯誤原因。

另外還可以加入 hasattr屬性提前對屬性進行判斷,代碼改寫如下

import urllib2

req = urllib2.Request('http://blog.csdn.net/cqcre')
try:
urllib2.urlopen(req)
except urllib2.URLError, e:
if hasattr(e,"code"):
print e.code
if hasattr(e,"reason"):
print e.reason
else:
print "OK"

首先對異常的屬性進行判斷,以免出現屬性輸出報錯的現象。

⑷ 為什麼python使用urllib2這里會出現錯誤

本帖最後由 crifan 於 2012-11-07 00:18 編輯

表面現象看起來是,你發送的地址給google伺服器,但是此地址有問題,導致人家返回你錯誤,說是:
HTTP Error 302: The HTTP server returned a redirect error that would lead to an infinite loop.

而此地址,看起來,你是從瀏覽器之類的地方,拷貝過來的。
但是,實際上,如果需要程序模擬此過程的話,需要找到此地址中的各種參數,即:
num=100
hl=zh-CN
newwindow=1
safe=strict
q=inurl%3Aadmin_login.aspx
oq=inurl%3Aadmin_login.aspx
gs_l=serp.3...125521.131943.0.132041.38.31.1.0.0.3.209.2367.23j3j1.27.0...0.0...1c.1.bvH-WnKtKjg
中每個參數的值,是如何獲得的,
然後再用程序去模擬過程,生成對應的參數,
然後才是去將此地址發送給人家的google的伺服器,才能獲得你所想要的結果的。

總之一句話,先要自己搞懂內部執行的過程,然後才是用程序模擬此過程。

⑸ python27中except urllib2.URLError, e:語句的小問題

except是處理所有出現的異常
except urllib2.URLError只有當出現urllib2.URLError這個異常時才會處理
except urllib2.URLError,e: 中間應該沒有逗號,應為
except urllib2.URLError e:
e表示一個urllib2.URLError類型的變數

⑹ python3.4 urllib.error.URLError: <urlopen error unknown url type:

你的http請求的鏈接有問題
鏈接是不是以協議的名稱(http:/ /)開頭

⑺ python urllib2進行網頁源代碼扒取時,出現urllib2.HTTPError: HTTP Error 250: Forbidden問題

HTTP請求的Headers包含瀏覽器的信息、所使用的語言、請求的主機、COOKIE等信息。

其中最重要的兩項是瀏覽器的信息User-Agent,如果請求中沒有User-Agent,網站會認為不是人在瀏覽器的請求,是惡意攻擊

對於需要登錄的網站,請求中往往需要COOKIE來驗證用戶,來獲取打開某些網站的許可權。

使用firefox瀏覽器的開發者工具箱>網路選項,可以很容易獲取User-Agent等頭信息

headers={"User-Agent":"Mozilla/5.0Firefox/35.0",
"Cookie":"BDUSS=AAAAAAAAAAAAAAAAAAAAAAAA",}
request=urllib2.Request(url,postData,headers=headers)
response=urllib2.urlopen(request)

⑻ python報錯urllib.error.URLError: <urlopen error unknown url type: src="https>,Windows系統怎麼解決

jango站點使用django_cas接入SSO(單點登錄系統),配置完成後登錄,拋出「urlopen error unknown url type: https」異常。尋根朔源發現是python內置的urllib模塊不支持https協議。

>>> import urllib
>>> urllib.urlopen('htom')
<addinfourl at 269231456 whose fp = <socket._fileobject object at 0xff98250>>
>>> urllib.urlopen('hm')
Traceback (most recent call last):
File "<stdin>", line 1, in <mole>
File "/usr/local/python27/lib/python2.7/urllib.py", line 86, in urlopen
return opener.open(url)
File "/usr/local/python27/lib/python2.7/urllib.py", line 204, in open
return self.open_unknown(fullurl, data)
File "/usr/local/python27/lib/python2.7/urllib.py", line 216, in open_unknown
raise IOError, ('url error', 'unknown url type', type)
IOError: [Errno url error] unknown url type: 'https'

之所以python內置的urllib模塊不支持https協議是因為編譯安裝python之前沒有編譯安裝類似於openssl這樣的SSL庫,以至於python不支持SSL

因為我用的是Centos系統所以安裝openssl-devel
sudo yum install openssl-devel

之後重新編譯Python
./configure(可選,因為之前已經配置過,按之前的配置來就行了,而且最好按之前的配置配編譯安裝以免依賴的庫需要重新編譯安裝。)
make
make install

>>> import urllib
>>> urllib.urlopen('htt.com')
沒有再報同樣的錯誤。

在安裝完openssl-devel後重新編譯python前也有說需要編輯Moles文件夾內Setup.dist文件的
修改
# Socket mole helper for SSL support; you must comment out the other
# socket line above, and possibly edit the SSL variable:
#SSL=/usr/local/ssl
#_ssl _ssl.c \
# -DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl \
# -L$(SSL)/lib -lssl -lcrypto

# Socket mole helper for SSL support; you must comment out the other
# socket line above, and possibly edit the SSL variable:
SSL=/usr/local/ssl
_ssl _ssl.c \
-DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl \
-L$(SSL)/lib -lssl -lcrypto

但實際測試下來好像並不需要修改這個文件,編譯的時候能自動將SSL庫編譯進python中。

另外需要特別注意的是,重新編譯安裝python後,通過可執行文件名(可能是個連接文件)運行python可能運行的還是老的python,這是因為可執行文件名沒有連接到新的python可執行程序。因此要用最新的python可執行文件名或指向該名字的連接來運行python。

重新編譯安裝python後有可能導致需要重新編譯django,MySQLdb,pycrypto,python-ldap,django-auth-ldap,django_cas,django_cas,pymongo等一些列依賴python的模塊。這里要特別注意

⑼ python 爬蟲時,urllib2.HTTPError:HTTP Error 502:Bad Gateway是什麼原因怎麼解決

可能是那個網站阻止了這類的訪問,只要在請求中加上偽裝成瀏覽器的header就可以了,比如:

headers={
'User-Agent':'Mozilla/5.0(Windows;U;WindowsNT6.1;en-US;rv:1.9.1.6)Gecko/20091201Firefox/3.5.6'
}
req=urllib2.Request(
url="http://www.qiushike.com/imgrank"
,
headers=headers
)
myResponse=urllib2.urlopen(req)

⑽ 求大神指導:用python的urllibe.urlretrieve(url, path)下載指定的url上的圖片時,出現錯誤

是不是e:/mlf是個目錄什麼的呀?如果是目錄,估計是沒法再寫個同名文件了。換個名字實驗一下,不能光指定到目錄。

熱點內容
路由器哪裡改密碼 發布:2024-12-25 00:53:18 瀏覽:658
編譯原理數組的翻譯三地址代碼 發布:2024-12-25 00:53:18 瀏覽:891
全新哈弗h6哪個車型配置夠用 發布:2024-12-25 00:51:35 瀏覽:887
安卓系統部落沖突如何用微信登錄 發布:2024-12-25 00:50:08 瀏覽:363
oracle啟動資料庫服務 發布:2024-12-25 00:50:03 瀏覽:65
手機游戲源碼開發 發布:2024-12-25 00:48:09 瀏覽:401
直流屏密碼是多少 發布:2024-12-25 00:28:26 瀏覽:655
汽車配置怎麼看馬力 發布:2024-12-25 00:23:49 瀏覽:83
ipad訪問許可權 發布:2024-12-25 00:23:01 瀏覽:690
rxjava上傳 發布:2024-12-25 00:22:59 瀏覽:306